我已经阅读了几篇关于使用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字符串。
答案 0 :(得分:4)
因为在JavaScript对象中没有排序,所以Object中的属性不会保留顺序。为了保留您的订单,您需要更改JSON以使用数组:[{"2":"stuff"}, {"1":"care"}]
。
答案 1 :(得分:0)
我能够移植this page上找到的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;
}
答案 2 :(得分:-1)
我们有一个关于显示的 JSON 格式的类似问题。有几个强大的解决方案可用:
我对 Chrome 的快速测试还发现 JSON.parse() 似乎 保留了顺序;这涵盖了大部分浏览器市场(Chrome、Edge 等),但不能保证在其他浏览器上使用。这可能会提供一种廉价的部分解决方案,但并不完全可靠。