尝试在JavaScript中实现JSON解析函数,以更漂亮的格式输出字符串
我很清楚npm包中存在尝试在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
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