美文网首页
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