JavaScript算法问题:尝试实现一个JSON解析函数以更漂亮的格式输出字符串

JavaScript算法问题:尝试实现一个JSON解析函数以更漂亮的格式输出字符串,javascript,json,Javascript,Json,我很清楚npm包中存在JSON.parse和JSON.stringify和prettier两种格式。但由于某些原因,我仍然必须手工完成。将其视为一个编码面试问题,请不要仅仅因为我可以使用JSON.parse和JSON.stringify而关闭此问题,正如我所说的,存在此约束。这个问题不是这个问题的重复 这是一个字符串“['foo',{bar:['baz',null,1.0,2]}]” 我想实现一个函数来返回一个字符串,该字符串表示具有适当标识的json对象 i、 e.输出字符串应为 [

我很清楚npm包中存在
JSON.parse
JSON.stringify
prettier
两种格式。但由于某些原因,我仍然必须手工完成。将其视为一个编码面试问题,请不要仅仅因为我可以使用
JSON.parse
JSON.stringify
而关闭此问题,正如我所说的,存在此约束。这个问题不是这个问题的重复

这是一个字符串
“['foo',{bar:['baz',null,1.0,2]}]”

我想实现一个函数来返回一个字符串,该字符串表示具有适当标识的json对象

i、 e.输出字符串应为

   [
        "foo", 
        {
            "bar":
            [
                "baz", 
                null, 
                1.0, 
                2
            ]
        }
    ]
这是我的尝试

函数printJSON(str){ 设空格=[]; 让输出=“”; str.split(“”).forEach(char=>{ 开关(字符){ 案例“{”: 案例“[”: 空格。按(“”); 输出+=char+'\n'+空格。连接(''); 打破 案例“}”: 案例']': 空格。pop(); 输出+='\n'+空格。连接('')+字符; 打破 案例',': 输出+=char+'\n'+空格。连接(''); 打破 违约: 输出+=字符; 打破 } }); 控制台日志(输出); 返回输出 } 但是,输出格式与中的略有不同

[ 
    "foo", 
     { 
        bar:[ // What about this, since you also need to add a carriage return after the colon:

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);
[ 
“福”, 
{ 

酒吧:[ // 既然您还需要在冒号后添加回车符,那么该怎么办