手写js代码格式化json数据

Posted fingersnow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手写js代码格式化json数据相关的知识,希望对你有一定的参考价值。

手写js代码格式化json数据

使用javascript格式化json数据。需要引入jQuery库。代码简单易懂,主要思想是递归,因为每层的数据格式都是一样的。

function jsonFormat(txt, tiperror, compress/*是否为压缩模式*/) {/* 格式化JSON源码(对象转换为JSON文本) */
    var indentChar = '    ';
    if (/^s*$/.test(txt)) {
        if (tiperror)
            alert('数据为空,无法格式化! ');
        return;
    }
    // 替换
 换行
    txt=txt.replace(/\r/g,"CRAPAPI_R"); 
    txt=txt.replace(/\n/g,"CRAPAPI_N"); 
    txt=txt.replace(/\t/g,"CRAPAPI_T"); 
    var data;
    try {
        data=$.parseJSON(txt);
    } catch (e) {
        if (tiperror)
            alert('数据源语法错误,格式化失败! 错误信息: ' + e.description, 'err');
        return;
    }
    ;
    var draw = [], last = false, This = this, line = compress ? '' : '
', 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.replace(/"/gm, '\"');
                // 替换
 换行
                value=value.replace(/CRAPAPI_R/g,"\r"); 
                value=value.replace(/CRAPAPI_N/g,"\n"); 
                value=value.replace(/CRAPAPI_T/g,"\t"); 

                value = '"' + value + '"';
            }
            draw.push(tab + (formObj ? ('"' + name + '":') : '') + value
                    + (isLast ? '' : ',') + line);
        }
        ;
    };
    var isLast = true, indent = 0;
    notify('', data, isLast, indent, false);
    return draw.join('');
}

以上是关于手写js代码格式化json数据的主要内容,如果未能解决你的问题,请参考以下文章

无敌秘籍之 — JavaScript手写代码

如何在 Reactjs 中添加丰富的代码片段?

前端面试题之手写promise

怎么用jsp生成json格式数据,然后用js又怎样读取其数据?

9.13面经

实用代码片段将json数据绑定到html元素 (转)