[英]JavaScript algorithm question: trying to implement a JSON parsing function to output a string in a prettier format
我很清楚JSON.parse
和JSON.stringify
的存在和prettier
的 npm ZEFE6B0D8E603E678C 但由于某种原因,我仍然必须手动执行此操作。 将其视为编码面试问题,请不要仅仅因为我可以使用JSON.parse
和JSON.stringify
就关闭这个问题,正如我所说的那样有这个约束。 这个问题不是使用 JavaScript 的漂亮打印 JSON的重复
这是一个字符串"['foo', {bar:['baz',null,1.0,2]}]"
我想实现一个 function 来返回一个字符串,该字符串表示 json object 具有适当的缩进。
即 output字符串应该是
[
"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
}
然而,output 格式略有偏离,如
[
"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 ':':
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.