• js/javascript format json(js/javascript 格式化json字符串)


    // format json obj string
    function format_json(txt, compress) {
        var indentChar = '    ';
        if (/^s*$/.test(txt)) {
            //alert('txt is empty');   
            return '';
        }
        try {
            var data = eval('(' + txt + ')');
            txt = txt.replace(new RegExp(""{","gm"), "{").replace(new RegExp("}"","gm"), "}");
            txt = txt.replace(new RegExp("\\\"","gm"), """);
            txt = txt.replace(new RegExp("\\\"","gm"), """);
            txt = txt.replace(new RegExp("\\\"","gm"), """);
    
            txt = txt.replace(new RegExp(" ","gm"), "");
    
    //        console.log(txt);
            data = eval('(' + txt + ')');
        } catch (e) {
            //alert('txt format error: '+e.description,'err');   
            return txt;
        }
        ;
        var draw = [], last = false, This = this, line = compress ? ''
                : '<br/>', nodeCount = 0, maxDepth = 0;
        var notify = function(name, value, isLast, indent, formObj) {
            if (indent == 0) {
                //draw.push('<table>');
            }
            nodeCount++;
            for (var i = 0, tab = ''; i < indent; i++)
                tab += indentChar;
            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('');
    }
    
    function addIndentBlank(indent) {
        indentChar = '&nbsp;&nbsp;&nbsp;&nbsp;';
        var ret = "";
        for (var i = 0; i < indent; i++) {
            ret += indentChar;
        }
        return ret;
    }
    
    // format all string
    function format_str(txt) {
        if (/^s*$/.test(txt)) {
            //alert('txt is empty');   
            return '';
        }
        try {
            //var data = eval('(' + txt + ')');
            txt = txt.replace(new RegExp(""{","gm"), "{").replace(new RegExp("}"","gm"), "}");    // "{->{   }"->}
            txt = txt.replace(new RegExp("\\\"","gm"), """);    // "->"
            txt = txt.replace(new RegExp("\\\"","gm"), """);
            txt = txt.replace(new RegExp("\\\"","gm"), """);
            
            txt = txt.replace(new RegExp("\\\\r","gm"), "\r");
            txt = txt.replace(new RegExp("\\\\n","gm"), "\n");
            txt = txt.replace(new RegExp("\\\\r","gm"), "\r");
            txt = txt.replace(new RegExp("\\\\n","gm"), "\n");
            txt = txt.replace(new RegExp("\\\\r","gm"), "\r");
            txt = txt.replace(new RegExp("\\\\n","gm"), "\n");
    
            //txt = txt.replace(new RegExp("&nbsp;","gm"), "");
    
            var draw = [];
            var line = "<br/>";
            var indent = 0;
            var quoteCount = 0;
            var quoteOddEven = 0;    // Even count quote(") to deal, Odd is string
            var containLeftBrace = false;
            var preChar = '';
            var nextChar = '';
            for (var i = 0; i < txt.length; i++) {
                 current = txt.charAt(i);
                 try {
                     nextChar = txt.charAt(i + 1);
                 } catch (e) {
                     console.log(e);
                 }
                 switch (current) {
                     case '{':
                         containLeftBrace = true;
                     case '[': {
                         if (preChar == '"') {
                             draw.push(current);
                             break;
                         }
                         if (quoteOddEven == 0) {
                             ++indent;
                             draw.push(current);
                             draw.push(line);
                             draw.push(addIndentBlank(indent));
                             break;
                         } else {
                             draw.push(current);
                             break;
                         }
                     }
                     case '}':
                     case ']': {
                         if (nextChar == '"') {
                             draw.push(current);
                             break;
                         }
                         if (quoteOddEven == 0) {
                             --indent;
                             draw.push(line);
                             draw.push(addIndentBlank(indent));
                             draw.push(current);
                             break;
                         } else {
                             draw.push(current);
                             break;
                         }
                     }
                     case ',': {
                         if (quoteOddEven == 0 && quoteCount > 0 && containLeftBrace) {
                             draw.push(current);
                             draw.push(line);
                             draw.push(addIndentBlank(indent));
                             break;
                         } else {
                             draw.push(current);
                             break;
                         }
                     }
                     case '\': {
                         try {
                             next1 = txt.charAt(i+1);
                             next2 = txt.charAt(i+2);
                             next3 = txt.charAt(i+3);
    //                         console.log(current + next1 + next2 + next3);
                             if ((next1 + "") == "r" && (current + next1 + next2 + next3) == "\r\n") {
                                 draw.push(line);
                                 draw.push(addIndentBlank(indent + 1));
                                 i = i+3;
                             }
                         } catch(e) {
                             console.log(e);
                         }
                         break;
                     }
                     case '"': {
                         quoteCount = quoteCount + 1;
                         quoteOddEven = (quoteOddEven + 1) % 2;
                         draw.push(current);
                         break;
                     }
                     default: {
                         draw.push(current);
                     }
                 }
                 preChar = current;
            }
    
    //        console.log('draw: ' + draw.join(''));
        } catch (e) {
    //        alert('txt format error: '+e,'err');   
            return txt;
        }
        ;
        return draw.join('');
    }
  • 相关阅读:
    程序设计思维与实践 Week5 作业 (3/4/数据班)
    程序设计思维与实践 Week6 作业 (3/4/数据班)
    Effective C++笔记(更新中...)
    二叉树的序列化与反序列化
    矩阵乘法的顺序安排问题 Python简单实现
    Python 读写Excel文件 总结
    2019美赛D题 人员疏散模型Python编程
    函数绘图语言 西电编译原理大作业
    洛谷试炼场 动态规划专练
    2019 IEEEXtreme 13.0 Impact Factor 影响因子
  • 原文地址:https://www.cnblogs.com/cobble19/p/6256156.html
Copyright © 2020-2023  润新知