尝试在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.输出字符串应为 [ "f

我很清楚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:[ // Have you tried 
JSON.stringify
's built in pretty printing?

Eg:

console.log(JSON.stringify(
  ['foo', { bar: ['baz', null, 1.0, 2 ] } ],
  null,
  4 // Indent, specify number of spaces or string
));
[ 
“福”, 
{ 

酒吧:[ // 你试过JSON.stringify内置的漂亮打印吗

例如:

console.log(JSON.stringify)(
['foo',{bar:['baz',null,1.0,2]}],
无效的
4//缩进,指定空格或字符串的数量
));
产出:

[
“福”,
{
“酒吧”:[
“巴兹”,
无效的
1.
2.
]
}
]
如果要将字符串用作修饰代码的函数的输入:

函数(字符串){
var object=JSON.parse(string)/*或eval(string)*/;
返回JSON.stringify(object,null,4);
}

然而,推出自己的解决方案并不困难。我们从写作开始-

const输入=
['foo',{bar:['baz',null,1.1,2]}]
常数结果=
toJson(输入)
其中
toJson
对输入
t
-

函数toJson(t,i=”“,d=0) {函数toString(t) {开关(t?.constructor) {案例对象: return[“{”,indent(Object.entries(t).map([k,v])=>`${k}:\n${toString(v)}`)。join(“,\n”),i,d+1),“}”。join(“\n”) 案例阵列: 返回[“[”,缩进(t.map(v=>toString(v)).join(“,\n”),i,d+1),“]”。join(“\n”) 大小写字符串: 返回“${t}”` 大小写布尔值: 返回t?“真”:“假” 违约: 返回字符串(t??null) } } 返回缩进(toString(t)、i、d) }
其中,
indent
是-

常量缩进=(s,i=,d=0)=>
s、 拆分(“\n”).map(v=>i.repeat(d)+v.join(“\n”)
展开下面的代码段,在您自己的浏览器中运行
toJson
-

函数toJson(t,i=”“,d=0) {函数toString(t) {开关(t?.constructor) {案例对象: return[“{”,indent(Object.entries(t).map([k,v])=>`${k}:\n${toString(v)}`)。join(“,\n”),i,d+1),“}”。join(“\n”) 案例阵列: 返回[“[”,缩进(t.map(v=>toString(v)).join(“,\n”),i,d+1),“]”。join(“\n”) 大小写字符串: 返回“${t}”` 大小写布尔值: 返回t?“真”:“假” 违约: 返回字符串(t??null) } } 返回缩进(toString(t)、i、d) } 常量缩进=(s,i=,d=0)=> s、 拆分(“\n”).map(v=>i.repeat(d)+v.join(“\n”) 常量输入= ['foo',{bar:['baz',null,1.1,2]}] 常数结果= toJson(输入)
console.log(result)
您是否尝试过
JSON.stringify
内置的漂亮打印

例如:

console.log(JSON.stringify)(
['foo',{bar:['baz',null,1.0,2]}],
无效的
4//缩进,指定空格或字符串的数量
));
产出:

[
“福”,
{
“酒吧”:[
“巴兹”,
无效的
1.
2.
]
}
]
如果要将字符串用作修饰代码的函数的输入:

函数(字符串){
var object=JSON.parse(string)/*或eval(string)*/;
返回JSON.stringify(object,null,4);
}

然而,推出自己的解决方案并不困难。我们从写作开始-

const输入=
['foo',{bar:['baz',null,1.1,2]}]
常数结果=
toJson(输入)
其中
toJson
对输入
t
-

函数toJson(t,i=”“,d=0) {函数toString(t) {开关(t?.constructor) {案例对象: return[“{”,indent(Object.entries(t).map([k,v])=>`${k}:\n${toString(v)}`)。join(“,\n”),i,d+1),“}”。join(“\n”) 案例阵列: 返回[“[”,缩进(t.map(v=>toString(v)).join(“,\n”),i,d+1),“]”。join(“\n”) 大小写字符串: 返回“${t}”` 大小写布尔值: 返回t?“真”:“假” 违约: 返回字符串(t??null) } } 返回缩进(toString(t)、i、d) }
其中,
indent
是-

常量缩进=(s,i=,d=0)=>
s、 拆分(“\n”).map(v=>i.repeat(d)+v.join(“\n”)
展开下面的代码段,在您自己的浏览器中运行
toJson
-

函数toJson(t,i=”“,d=0) {函数toString(t) {开关(t?.constructor) {案例对象: return[“{”,indent(Object.entries(t).map([k,v])=>`${k}:\n${toString(v)}`)。join(“,\n”),i,d+1),“}”。join(“\n”) 案例阵列: 返回[“[”,缩进(t.map(v=>toString(v)).join(“,\n”),i,d+1),“]”。join