zoukankan      html  css  js  c++  java
  • 对Json字符串进行格式化显示

    很多时候,我们拿Json字符串作为返回结果,但是当数据量多的时候,一堆的Json字符串看起来很不直观,这时候我们可以使用以下办法将Json字符串格式化一下再输出

    var JsonUti = {
                //定义换行符
                n: "
    ",
                //定义制表符
                t: "	",
                //转换String
                convertToString: function (obj) {
                    return JsonUti.__writeObj(obj, 1);
                },
                //写对象
                __writeObj: function (obj    //对象
                        , level             //层次(基数为1)
                        , isInArray) {       //此对象是否在一个集合内
                    //如果为空,直接输出null
                    if (obj == null) {
                        return "null";
                    }
                    //为普通类型,直接输出值
                    if (obj.constructor == Number || obj.constructor == Date || obj.constructor == String || obj.constructor == Boolean) {
                        var v = obj.toString();
                        var tab = isInArray ? JsonUti.__repeatStr(JsonUti.t, level - 1) : "";
                        if (obj.constructor == String || obj.constructor == Date) {
                            //时间格式化只是单纯输出字符串,而不是Date对象
                            return tab + (""" + v + """);
                        }
                        else if (obj.constructor == Boolean) {
                            return tab + v.toLowerCase();
                        }
                        else {
                            return tab + (v);
                        }
                    }
    
                    //写Json对象,缓存字符串
                    var currentObjStrings = [];
                    //遍历属性
                    for (var name in obj) {
                        var temp = [];
                        //格式化Tab
                        var paddingTab = JsonUti.__repeatStr(JsonUti.t, level);
                        temp.push(paddingTab);
                        //写出属性名
                        temp.push(name + " : ");
    
                        var val = obj[name];
                        if (val == null) {
                            temp.push("null");
                        }
                        else {
                            var c = val.constructor;
    
                            if (c == Array) { //如果为集合,循环内部对象
                                temp.push(JsonUti.n + paddingTab + "[" + JsonUti.n);
                                var levelUp = level + 2;    //层级+2
    
                                var tempArrValue = [];      //集合元素相关字符串缓存片段
                                for (var i = 0; i < val.length; i++) {
                                    //递归写对象                         
                                    tempArrValue.push(JsonUti.__writeObj(val[i], levelUp, true));
                                }
    
                                temp.push(tempArrValue.join("," + JsonUti.n));
                                temp.push(JsonUti.n + paddingTab + "]");
                            }
                            else if (c == Function) {
                                temp.push("[Function]");
                            }
                            else {
                                //递归写对象
                                temp.push(JsonUti.__writeObj(val, level + 1));
                            }
                        }
                        //加入当前对象“属性”字符串
                        currentObjStrings.push(temp.join(""));
                    }
                    return (level > 1 && !isInArray ? JsonUti.n : "")                       //如果Json对象是内部,就要换行格式化
                        + JsonUti.__repeatStr(JsonUti.t, level - 1) + "{" + JsonUti.n     //加层次Tab格式化
                        + currentObjStrings.join("," + JsonUti.n)                       //串联所有属性值
                        + JsonUti.n + JsonUti.__repeatStr(JsonUti.t, level - 1) + "}";   //封闭对象
                },
                __isArray: function (obj) {
                    if (obj) {
                        return obj.constructor == Array;
                    }
                    return false;
                },
                __repeatStr: function (str, times) {
                    var newStr = [];
                    if (times > 0) {
                        for (var i = 0; i < times; i++) {
                            newStr.push(str);
                        }
                    }
                    return newStr.join("");
                }
            };

    使用:alert(JsonUti.convertToString(data)); 其中data为json对象。

    格式化之前:

    {"Data":"","Code":403,"Message":"无权访问"}

    格式化之后效果:

    {
        Data : "",
        Code : 403,
        Message : "无权访问"
    }

  • 相关阅读:
    HDU 1850 Being a Good Boy in Spring Festival
    UESTC 1080 空心矩阵
    HDU 2491 Priest John's Busiest Day
    UVALive 6181
    ZOJ 2674 Strange Limit
    UVA 12532 Interval Product
    UESTC 1237 质因子分解
    UESTC 1014 Shot
    xe5 android listbox的 TMetropolisUIListBoxItem
    xe5 android tts(Text To Speech)
  • 原文地址:https://www.cnblogs.com/mooncher/p/4444765.html
Copyright © 2011-2022 走看看