美文网首页
JSON格式化

JSON格式化

作者: firedbullet | 来源:发表于2018-05-02 10:51 被阅读0次
    
    /**
    * 格式化JSON
    * @param obj 传入的对象
    * @param jsKey 解析对象的key是否包含引号
    * @param parseArr 是否解析数组
    * @param newlineForArr 是否对数组的元素换行
    */
    const getCfg = (obj, jsKey = false, parseArr = false, newlineForArr = false) => {
        let arr = [];
        stringObj(arr, obj, 0, jsKey, parseArr, newlineForArr);
        return arr.join("");
    }
    //解析对象
    const stringObj = (arr: Array<string>, obj: JSON, layer: number, jsKey = true, parseArr = false, newlineForArr = false) => {
        //对象
        if (obj && typeof obj === "object" && !Array.isArray(obj)) {
            arr.push("{\n");
            layer++;
            for (let j = 0; j < layer; j++) {
                arr.push("\t");
            }
            let keys = Object.keys(obj);
            for (let i = 0; i < keys.length; i++) {
                arr.push(`${!jsKey ? "\"" : ""}${keys[i]}${!jsKey ? "\"" : ""}: `);
                stringObj(arr, obj[keys[i]], layer, jsKey, parseArr, newlineForArr);
                if (i === keys.length - 1) {
                    arr.push("\n");
                    layer--;
                }
                else {
                    arr.push(",\n");
                }
                for (let j = 0; j < layer; j++) {
                    arr.push("\t");
                }
            }
            layer--;
            arr.push("}")
        }
        //数组
        else if (obj && Array.isArray(obj) && parseArr) {
            arr.push("[");
            //不是空数组
            if (obj.length) {
                let hasObj = newlineForArr || obj.some((child) => { return typeof child === "object" })
                //数组包含对象或者数组
                if (hasObj) {
                    arr.push("\n");
                    layer++;
                    for (let j = 0; j < layer; j++) {
                        arr.push("\t");
                    }
                }
    
                for (let i = 0; i < obj.length; i++) {
                    stringObj(arr, obj[i], layer, jsKey, parseArr, newlineForArr);
                    //数组包含对象或者数组
                    if (hasObj) {
                        if (i === obj.length - 1) {
                            arr.push("\n");
                            layer--;
                        }
                        else {
                            arr.push(", \n");
                        }
                        for (let j = 0; j < layer; j++) {
                            arr.push("\t");
                        }
                    }
                    else if (i !== obj.length - 1) {
                        arr.push(", ");
                    }
                }
                layer--;
            }
            arr.push("]")
        }
        else {
            arr.push(JSON.stringify(obj))
        }
    }
    
    let a = {b:{c:{d:{e:[1,2,3,[4,5,6]]}}}};
    getCfg (a,false,true);
     "{
        "b": {
            "c": {
                "d": {
                    "e": [
                        1, 
                        2, 
                        3, 
                        [4, 5, 6]
                    ]
                }
            }
        }
    }"
    

    相关文章

      网友评论

          本文标题:JSON格式化

          本文链接:https://www.haomeiwen.com/subject/gsxinxtx.html