我很清楚 JSON.parse
和 JSON.stringify
以及 prettier
npm 包的存在。但出于某种原因,我仍然必须手工完成。把它想象成一个编码面试问题,请不要仅仅因为我可以使用 JSON.parse
和 JSON.stringify
而关闭这个问题,因为我说过有这个限制。这个问题不是这个pretty-print JSON using JavaScript
这是一个字符串 "['foo', {bar:['baz',null,1.0,2]}]"
我想实现一个函数来返回一个字符串,该字符串表示一个具有适当缩进的 json 对象。
即输出 string 应该是
[
"foo",
{
"bar":
[
"baz",
null,
1.0,
2
]
}
]
这是我的尝试
function printJSON(str) {
let spaces = [];
let output = '';
str.split('').forEach(char => {
switch(char) {
case '{':
case '[':
spaces.push(' ');
output += char + '\n' + spaces.join('');
break;
case '}':
case ']':
spaces.pop();
output += '\n' + spaces.join('') + char;
break;
case ',':
output += char + '\n' + spaces.join('');
break;
default:
output += char;
break;
}
});
console.log(output);
return output
}
但是输出格式与在
中略有不同[
"foo",
{
bar:[ // ?
"baz",
null,
1.0,
2
]
}
]
我该如何解决这个格式问题?还有没有更优雅的方法或替代方法来实现这一目标?
答案 0 :(得分:1)
这个呢,因为你还需要在冒号后面加一个回车:
function printJSON(str) {
let spaces = [];
let output = '';
str.split('').forEach(char => {
switch (char) {
case '{':
case '[':
spaces.push(' ');
output += char + '\n' + spaces.join('');
break;
case ':':
output += char + '\n' + spaces.join('');
break;
case '}':
case ']':
spaces.pop();
output += '\n' + spaces.join('') + char;
break;
case ',':
output += char + '\n' + spaces.join('');
break;
default:
output += char;
break;
}
});
console.log(output);
return output
}
let string = "['foo', {bar:['baz',null,1.0,2]}]";
printJSON(string);