[英]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.