您的位置:首页 > Web前端 > JavaScript

一段JS格式化JSON的代码

2015-10-28 17:49 627 查看
项目中需要在页面中格式化JSON代码,看到百度上有一个这样的应用,地址:http://app.baidu.com/editjson?keyword=json%E7%BC%96%E8%BE%91%E5%99%A8

里面的格式化JSON代码的功能比较好用,就将里面的关键代码提取了出来,稍作修改,方便在其他地方引用,代码如下:

使用方法,format(json)这样为格式化代码。

format(json,true)为开启压缩模式。

function format(txt,compress/*是否为压缩模式*/){/* 格式化JSON源码(对象转换为JSON文本) */

var indentChar = ' ';

if(/^\s*$/.test(txt)){

alert('数据为空,无法格式化! ');

return;

}

try{var data=eval('('+txt+')');}

catch(e){

alert('数据源语法错误,格式化失败! 错误信息: '+e.description,'err');

return;

};

var draw=[],last=false,This=this,line=compress?'':'\n',nodeCount=0,maxDepth=0;

var notify=function(name,value,isLast,indent/*缩进*/,formObj){

nodeCount++;/*节点计数*/

for (var i=0,tab='';i<indent;i++ )tab+=indentChar;/* 缩进HTML */

tab=compress?'':tab;/*压缩模式忽略缩进*/

maxDepth=++indent;/*缩进递增并记录*/

if(value&&value.constructor==Array){/*处理数组*/

draw.push(tab+(formObj?('"'+name+'":'):'')+'['+line);/*缩进'[' 然后换行*/

for (var i=0;i<value.length;i++)

notify(i,value[i],i==value.length-1,indent,false);

draw.push(tab+']'+(isLast?line:(','+line)));/*缩进']'换行,若非尾元素则添加逗号*/

}else if(value&&typeof value=='object'){/*处理对象*/

draw.push(tab+(formObj?('"'+name+'":'):'')+'{'+line);/*缩进'{' 然后换行*/

var len=0,i=0;

for(var key in value)len++;

for(var key in value)notify(key,value[key],++i==len,indent,true);

draw.push(tab+'}'+(isLast?line:(','+line)));/*缩进'}'换行,若非尾元素则添加逗号*/

}else{

if(typeof value=='string')value='"'+value+'"';

draw.push(tab+(formObj?('"'+name+'":'):'')+value+(isLast?'':',')+line);

};

};

var isLast=true,indent=0;

notify('',data,isLast,indent,false);

return draw.join('');

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: