项目中需要在页面中格式化JSON代码,看到百度上有一个这样的应用,地址:http://app.baidu.com/editjson?keyword=json%E7%BC%96%E8%BE%91%E5%99%A8
里面的格式化JSON代码的功能比较好用,就将里面的关键代码提取了出来,稍作修改,方便在其他地方引用,代码如下:
使用方法,format(json)这样为格式化代码。
format(json,true)为开启压缩模式。
样例1:
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(''); }
样例2:
getFormatJsonStrFromString:function(jsonStr){ var res=""; for(var i=0,j=0,k=0,ii,ele;i<jsonStr.length;i++) {//k:缩进,j:""个数 ele=jsonStr.charAt(i); if(j%2==0&&ele=="}") { k--; for(ii=0;ii<k;ii++) ele=" "+ele; ele="\n"+ele; } else if(j%2==0&&ele=="{") { ele+="\n"; k++; for(ii=0;ii<k;ii++) ele+=" "; } else if(j%2==0&&ele==",") { ele+="\n"; for(ii=0;ii<k;ii++) ele+=" "; } else if(ele=="\"") j++; res+=ele; } return res; },
参见网站:
- http://www.atool.org/jsonformat.php
- http://web.chacuo.net/formatjson/
- http://tool.oschina.net/codeformat/json
- http://www.bejson.com/