Javascript 漂亮的打印JSON保留属性顺序
我读过几篇关于使用Javascript 漂亮的打印JSON保留属性顺序,javascript,json,formatting,Javascript,Json,Formatting,我读过几篇关于使用JSON.stringify用Javascript漂亮地打印JSON字符串的文章。但是,它似乎重新排列了节点。我希望有一个格式化的JSON对象,其顺序与提供的字符串相同 下面是一个使用指定方法得到的示例 var sJson = '{"2":"stuff", "1":"care"}'; alert(JSON.stringify(JSON.parse(sJson), null, 2)); 结果: { "1": "care", "2": "stuff" } 预期结果: {
JSON.stringify
用Javascript漂亮地打印JSON字符串的文章。但是,它似乎重新排列了节点。我希望有一个格式化的JSON对象,其顺序与提供的字符串相同
下面是一个使用指定方法得到的示例
var sJson = '{"2":"stuff", "1":"care"}';
alert(JSON.stringify(JSON.parse(sJson), null, 2));
结果:
{
"1": "care",
"2": "stuff"
}
预期结果:
{
"2": "stuff",
"1": "care"
}
如果
JSON.stringify
无法做到这一点,我很乐意使用外部库。注意:我从服务器上的一个缩小的JSON字符串开始。因为在JavaScript中,对象没有顺序,对象中的属性没有顺序。为了保持秩序,您需要将JSON改为使用数组:[{“2”:“stuff”},{“1”:“care”}]
我能够移植在上找到的php函数;它像冠军一样工作
function pad(width, string, padding) {
return (width <= string.length) ? string : pad(width, padding + string, padding)
}
function json_pretty(json, html)
{
var
out = '',
nl = "\n",
cnt = 0,
tab = 4,
len = json.length,
space = ' ';
if(html == true) {
space = ' ';
nl = '<br/>';
}
k = space.length ? space.length : 1;
for (i=0; i<=len; i++) {
char = json.substring(i, i+1);
if(char == '}' || char == ']') {
cnt--;
out += nl + '' + pad(tab * cnt * k, '', space);
}
else if(char == '{' || char == '[') {
cnt++;
}
out += char;
if(char == ',' || char == '{' || char == '[') {
out += nl + pad(tab * cnt * k, '', space);
}
if(char == ':') {
out += ' ';
}
}
return out;
}
功能板(宽度、字符串、填充){
return(width关于显示的JSON格式,我们有一个类似的问题。有两个强大的解决方案:
- 该软件包提供解析、格式化和漂亮的打印,具有稳定的顺序。这是基于有顺序的输入
- 该包提供基于排序的确定格式
我对Chrome的快速测试还发现,JSON.parse()似乎能保持秩序;这涵盖了浏览器市场的大部分领域(Chrome、Edge等)但在其他浏览器上不能保证。这可能提供廉价的部分解决方案,但并不完全可靠。请参阅和。这导致另一个链接:--这是一个有趣的解决方案。如果对顺序有一些期望,为什么不尝试实现某种排序?javascript中的对象没有顺序,如果您想使用数组^Sin排序ce在对象上迭代并不能维持顺序,将字符串解析为JS对象可能不是最好的主意。@charlietfl:而是使用一个可以格式化JSON而不转换为JS对象的库。问题是如何漂亮地打印JSON,这意味着它是供人使用的。我们都知道顺序对程序来说并不重要,b但有时程序可能会以特定的顺序将JSON数据写入文件,这种顺序对人类可能有意义。此代码段不需要检查“双引号开始/结束字符串值,并将中断(产生错误的输出)当它遇到字符串中的大括号/方括号时。请参阅JSON规范作为参考:对我来说,最新版本的chrome上仍然存在原始问题。您介意使用JSON顺序和原始问题字符串('{“2”:“stuff”,“1”:“care”}更新您的答案吗,我很乐意接受这个正确答案。