使用Javascript打印JSON数据

使用Javascript打印JSON数据

转发请标明原文链接:http://www.cnblogs.com/misuoka/p/4081750.html

废话不扯,直入主题。

一般来说,Chrome和Firefox两款浏览器已提供我们强大的调试功能,可以在网络请求选项中查看Ajax请求页返回的JSON数据。但如果数据较为复杂,就不易于观看。

例如:

1.Chrome中的情况:

2.Firefox中的情况:

所以,我们可以编写一个函数来把JSON对象以友好的格式打印到HTML页面中,以便观看。

效果如下:

实现代码:

/** 输出空格函数 */
function blank(num) {
    var res = '';
    for (var i = 0; i < num; i++) {
        res += ' ';
    }
    return res;
}   

/** 计算JSON对象数据个数 */
function jsonLen(jsonObj) {
    var length = 0;
    for (var item in jsonObj) {
      	length++;
    }
    return length;
}

/** 解析JSON对象函数 */
function printObj(obj) {
    // JSON对象层级深度
    deep = (typeof(deep)=='undefined') ? 0: deep;
    var html = "Array\n"; // 返回的HTML
    html += kong(deep) + "(\n";
    var i = 0; 
    // JSON对象,不能使用.length获取数据的个数,故需自定义一个计算函数
    var len = typeof(obj) == 'array' ? obj.length : jsonLen(obj);
    for(var key in obj){
        // 判断数据类型,如果是数组或对象,则进行递归
        // 判断object类型时,&&jsonLen(obj[key])是由于
        // 1、值(类似:email:)为null的时候,typeof(obj[key])会把这个key当做object类型
        // 2、值为null的来源是,数据库表中某些字段没有数据,查询之后直接转为JSON返回过来
        if(typeof(obj[key])=='array'|| (typeof(obj[key])=='object' && jsonLen(obj[key]) > 0) ){
            deep += 3;
            html += kong(deep) + '[' + key + '] => ';
            // 递归调用本函数
            html += printObj(obj[key],deep);
            deep -= 3;
        }else{
            html += kong(deep + 3) + '[' + key + '] => ' + obj[key] + '\n';
        }
        if (i == len -1) {
            html += kong(deep) + ")\n";
        };
        i++;
    }
    return html;
}

/** 向HTML页面追加打印JSON数据 */
function p_Obj(obj) {
    var div = document.getElementById('print-json-html');
    if (div != null) {
        document.body.removeChild(div);
    };
    var node = document.createElement("div");//创建一个div标签 
    node.id = 'print-json-html';
    node.innerHTML = '<pre>' + printObj(obj) + '</pre>';
    document.body.appendChild(node);
}
posted @ 2014-11-07 17:03  随机的树  阅读(3711)  评论(0)    收藏  举报