js解析json格式(像console.log打印的格式)
console.log 控制台打印,可以友好的打印出有层次结构的json对象。pc端下屡试不爽。但如果在手机浏览器呢?alert可没有这个功能,所以自己也尝试写个函数来打印出层次结构清晰的json对象。
- 代码
/**
* 解析对象成字符串
* @param {object} obj 待传入的对象
* 其他变量省略
**/
function parseObjToString(obj){
var filter = ['top', 'window', 'document', 'localStorage', 'sessionStorage', 'cookie'], //不会解析该属性。
x = null, //没用的临时变量
n = '<br/>', //换行
Parse = {
parse_obj : function(obj, blank, parse_obj_times){//解析对象和数组
!parse_obj_times && (parse_obj_times = 0);
if (parse_obj_times > 20) {return '';}
switch(typeof obj){
case 'object':
var temp = '{',
isobj = true;
temp += n;
blank = blank || 1;
''+{}.toString.call(obj) === "[object Array]" && (isobj = false);
isobj ? temp = '{'+ n : temp = '['+ n;
for (x in obj) {
if (typeof obj[x] == 'object') {
if(filter.indexOf(x) !== -1 ) continue;
parse_obj_times ++;
temp += this.get_head(blank, isobj) + this.parse_obj(obj[x], blank+1, parse_obj_times)+ ',' + n;
}else{
temp += this.get_head(blank, isobj) + this.parse_sign(obj[x]) +',' + n;
}
}
temp = temp.substr(0, temp.length - (',' + n).length || 1)+ n;
return temp + this.get_blank(blank - 1) + (isobj ? '}' : ']') ;
default :
return obj;
}
},
parse_sign: function(str){//解析特殊符号
return (''+str).replace(/</g, '<').replace(/>/g, '>').replace(/\\n|\\n\\r/g, '<br>')
.replace(/\\t/g, ' ')
.replace(/\\s\\s/g, ' ');
},
get_blank : function(num){//返回相应num的空白
for (var i = 0, blank=''; i < num; i++) {
blank += ' ';
}
return blank;
},
get_head: function(blank, isobj){
return this.get_blank(blank)+ (isobj ? x+ ' : ' : '');
}
};
return Parse.parse_obj(obj);
}
function printToBody(data){
$('body').append('<br>'+parseObjToString(data));
}
最后当我弄完后发现直接用JSON.stringify来得更直接
JSON.stringify(obj, undefined, '\t')