使用 js 美化 json

来源:互联网 发布:文明的起源知乎 编辑:程序博客网 时间:2024/06/04 19:35
//json美化
varformatJson=function(json,options){
varreg=null,
formatted='',
pad=0,
PADDING=' ';// one can also use '\t' or a different number of spaces

// optional settings
options=options|| {};
// remove newline where '{' or '[' follows ':'
options.newlineAfterColonIfBeforeBraceOrBracket=(options.newlineAfterColonIfBeforeBraceOrBracket===true)?true:false;
// use a space after a colon
options.spaceAfterColon=(options.spaceAfterColon===false)?false:true;

// begin formatting...
if(typeofjson!=='string'){
// make sure we start with the JSON as a string
json=JSON.stringify(json);
}else{
// is already a string, so parse and re-stringify in order to remove extra whitespace
json=JSON.parse(json);
json=JSON.stringify(json);
}

// add newline before and after curly braces
reg=/([\{\}])/g;
json=json.replace(reg,'\r\n$1\r\n');

// add newline before and after square brackets
reg=/([\[\]])/g;
json=json.replace(reg,'\r\n$1\r\n');

// add newline after comma
reg=/(\,)/g;
json=json.replace(reg,'$1\r\n');

// remove multiple newlines
reg=/(\r\n\r\n)/g;
json=json.replace(reg,'\r\n');

// remove newlines before commas
reg=/\r\n\,/g;
json=json.replace(reg,',');

// optional formatting...
if(!options.newlineAfterColonIfBeforeBraceOrBracket){
reg=/\:\r\n\{/g;
json=json.replace(reg,':{');
reg=/\:\r\n\[/g;
json=json.replace(reg,':[');
}
if(options.spaceAfterColon){
reg=/\:/g;
json=json.replace(reg,':');
}

$.each(json.split('\r\n'),function(index,node){
vari=0,
indent=0,
padding='';

if(node.match(/\{$/)||node.match(/\[$/)){
indent=1;
}else if(node.match(/\}/)||node.match(/\]/)){
if(pad!==0){
pad-=1;
}
}else{
indent=0;
}

for(i=0;i<pad;i++){
padding+=PADDING;
}

formatted+=padding+node+'\r\n';
pad+=indent;
});

returnformatted;
};