麻烦排序JSON

时间:2012-07-05 14:06:03

标签: javascript json sorting

我有一个JSON对象,如下所示:

{"Data": {
     "290": {
             ...
            }
     "300": {
             ...
            }
     "281": {
             ...
            }
         }
 }

如何根据顶部容器键(即“290”,“300”,“281”)对此JSON进行排序?

编辑:所以我用了

$.getJSON('current/csf.txt', function(data) { arr = data["Data"]; }

它根据键对它们进行排序。为什么会这样?

4 个答案:

答案 0 :(得分:4)

您已标记此“JavaScript”,因此我假设您的意思是“使用此JSON生成的JavaScript对象”。

在哪种情况下:

  1. 遍历属性名称(使用for in循环)。
  2. 使用它们填充数组。
  3. 对数组进行排序。
  4. 将数组用作地图。
  5. (您无法在对象中存储有序数据)。

    如果要将结果存储在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中,对象属性不以特定顺序存储;一个对象只有属性。

您不能使用数组索引表示法来访问对象属性,因此按键排序对象属性的概念没有实际意义。