我有一个通过PHP生成的相当大的JSON对象。它从数据库中创建一个PHP对象,其键为整数,即1-100。这些键不是按顺序排列的,它们是随机顺序的,例如55,72,5,8,14,32,64等。然后我使用json_encode将对象输出为JSON。然后我使用AJAX调用来获取JSON并将其存储在变量中。但是,该变量的顺序为1-100的JSON对象,而不是上面的排序顺序。
为什么会这样做,以及我如何解决这个问题?
答案 0 :(得分:5)
JSON对象没有特定的顺序,并且不保证保持您输入的顺序。如果您想要一个顺序中的键,您应该将它们放在一个维护顺序的数组中。如果您想要一组有序的键/值对,可以使用几种不同的形式。
最简单的是只有一个单独的数组,它是一组交替的键值:
var data = ["key1", "value1", "key2", "value2",...];
或者,你可以做一个对象数组:
var data = [{key: "key1", data: "value1"}, {key: "key2", data: "value2"}, {...}]
答案 1 :(得分:2)
对象中的键在技术上没有订购。您希望它们按特定顺序排列是数据结构中的错误。 JSON解析器会将数字键解释为数组位置。
此
{
55: "foo",
29: "bar",
...
}
在语义上与:
相同object[55] = "foo"
object[29] = "bar"
是:
[
...
"bar" //index 29
...
"foo" //index 55
...
]
相反,您应该将对象的顺序和标识分开:
[
{id: 55, content: "foo"},
{id: 29, content: "bar"},
...
]