/**
* 格式化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]
]
}
}
}
}"
网友评论