我正在编写一个简单的PrettyPrint函数,该函数只能在字符串和对象中进行较浅的遍历。
我认为这非常接近
就是
{
"name": "Jon",
"facts": {
"car": "Ford",
"address": {
"city": "New York"
},
"watch": "Casio",
"other": {}
},
}
the},以及右括号之前的空格,我该如何解决,使其输出就像JSON.Stringify一样?
{
"name": "Jon",
"facts": {
"car": "Ford",
"address": {
"city": "New York"
},
"watch": "Casio",
"other": {}
}
}
const exampleJson = {"name":"Jon","facts":{"car":"Ford","address":{"city":"New York"},"watch":"Casio","other": {}}};
const prettify = obj => {
tabs = n => Array(n).fill(' ').join('');
let traverse = (obj, tab = 1) => {
let markup = '{\n';
Object.entries(obj).forEach(kv => {
const [key, val] = kv;
if (typeof val === 'string') {
const { length } = Object.keys(val);
markup += `${tabs(tab)} "${key}": "${val}"`;
} else if (typeof val === 'object') {
const { length } = Object.keys(val);
if (length > 0) {
markup += `,\n${tabs(tab)} "${key}": ${traverse(val, tab+2)},\n`;
} else {
markup += `,\n${tabs(tab)} "${key}": {}`;
}
}
})
markup += `\n${tabs(tab - 1)}}`;
return markup;
}
let results = traverse(obj);
console.log(results);
}
prettify(exampleJson);
答案 0 :(得分:2)
在这种情况下,您要添加逗号,但在另一种情况下,请不要添加逗号。在一般情况下,这将永远行不通。
相反,无论值如何,都应使用逗号和换行符。除了第一个外,其他任何一个都可以
Object.entries(obj).forEach(([key, value], i) => {
if(i) markup += ",\n";
markup += tabs(tab);
markup += key + ": ";
// serialize and add value
});
或将其附加到除最后一个以外的任何内容上:
Object.entries(obj).forEach(([key, value], i, { length }) => {
markup += tabs(tab);
markup += key + ": ";
// serialize and add value
if(i !== length - 1) markup += ",\n";
});
答案 1 :(得分:1)
您可以通过g()
设置一些字符来一次解决这两个问题:
square
replace