我返回了以下JSON数据,但由于某种原因,Javascript或jQuery ajax似乎重新组织了项目列表。服务器返回按item.title(已验证)...
按字母顺序排序的数据下面的JSON是在订购被屠杀之后:
{
"count": 3,
"items": {
"tardis": {
"type": 40,
"title": "Tardis",
"timeMachine": true,
"reliable": true
},
"stargate": {
"type": "Milky way gate",
"title": "Stargate + solar flare",
"timeMachine": true,
"reliable": false
}
}
}
有没有人为什么订购被篡改?如何按标题值重新排序项目?
答案 0 :(得分:5)
您的items
对象不是数组,而只是具有命名成员的对象。这些成员没有固有的秩序。
例如,在chrome中执行console.log({ your object })
将按照该顺序生成按成员名称排序的属性,在本例中为“stargate”和“tardis”。但是为完全相同的对象写for(k in x.items) console.log(k)
(在Chrome中 - 再次,这里没有可靠的规范)按照它们定义的顺序迭代对象,并记录“tardis”,“stargate”。
这种排序是一个如何呈现对象的工件,而不是对象本身。如果要订购,请使用数组:
{
"count": 3,
"items": [
{
"key": "stargate",
"type": "Milky way gate",
"title": "Stargate + solar flare",
"timeMachine": true,
"reliable": false
},
{
"key": "tardis",
"type": 40,
"title": "Tardis",
"timeMachine": true,
"reliable": true
}
]
}
答案 1 :(得分:3)
对象的键不是按照定义的顺序。一旦将它们放入javascript对象中,它们就可以按任何顺序返回。这是语言的设计和指定。
如果您希望它们按特定顺序排列,那么您需要将数据放在一个数组中(这是有序的),或者您需要一个有序索引,只需要能够按所需顺序访问键的键。
数组具有一致的顺序,对象则没有。
在我看来,您可能需要一个如下所示的数据结构:
{
"count": 3,
"items": [
{
"name": "tardis",
"type": 40,
"title": "Tardis",
"timeMachine": true,
"reliable": true
},
"name": "stargate",
"type": "Milky way gate",
"title": "Stargate + solar flare",
"timeMachine": true,
"reliable": false
}
]
}
这样,这些项目就是一个包含特定订单的数组:items[0]
,items[1]
等......
仅供参考,当您这样做时,您不需要"count"
值,因为items
数组会有items.length
。
没有计数值,您的整个响应可能只是对象数组:
[
{
"name": "tardis",
"type": 40,
"title": "Tardis",
"timeMachine": true,
"reliable": true
},
"name": "stargate",
"type": "Milky way gate",
"title": "Stargate + solar flare",
"timeMachine": true,
"reliable": false
}
]
答案 2 :(得分:1)
如果你在http://www.json.org/阅读JSON规范,你会遇到这一行 - 对象是一组无序的名称/值对
因此,信任对象中键的顺序是不明智的。将其声明为数组,您可以订购。