我有一个JSON对象,如下所示:
{"Data": {
"290": {
...
}
"300": {
...
}
"281": {
...
}
}
}
如何根据顶部容器键(即“290”,“300”,“281”)对此JSON进行排序?
编辑:所以我用了
$.getJSON('current/csf.txt', function(data) { arr = data["Data"]; }
它根据键对它们进行排序。为什么会这样?
答案 0 :(得分:4)
您已标记此“JavaScript”,因此我假设您的意思是“使用此JSON生成的JavaScript对象”。
在哪种情况下:
for in
循环)。(您无法在对象中存储有序数据)。
如果要将结果存储在JSON中,则需要更改数据结构(并使用数组(对象))。对象明确无序。
答案 1 :(得分:4)
你的结构错了,应该是这样的:
{
"Data": [
{
"id": "290"
},
{
"id": "300"
},
{
"id": "282"
}
]
}
对象用于无序数据。将数组用于有序数据。这个数组很容易在这里排序:
obj.Data.sort(function(a,b){
return a.id - b.id;
});
您可以像这样转换为此结构:
function copyProps(dest, src) {
for (var key in src) {
dest[key] = src[key];
}
return dest;
}
var newData = [];
for (var key in obj.Data) {
newData.push(copyProps({
id: key
}, obj.Data[key]));
}
答案 2 :(得分:1)
我同意Amberlamps的评论,你不应该试图对一个对象的键进行排序,但是如果你想出于某种原因你可能会看一下underscore.js's sortBy method < / p>
答案 3 :(得分:1)
即使您可以对对象属性进行排序,也无法保证您可以按排序顺序读取它们。在Javascript中,对象属性不以特定顺序存储;一个对象只有属性。
您不能使用数组索引表示法来访问对象属性,因此按键排序对象属性的概念没有实际意义。