1

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

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

我将如何根据顶级容器键(即“290”、“300”、“281”)对这个 JSON 进行排序?

编辑:所以我用

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

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

4

4 回答 4

4

你已经标记了这个“JavaScript”,所以我假设你的意思是“从这个 JSON 生成的 JavaScript 对象”。

在这种情况下:

  1. 循环遍历属性名称(使用for in循环)。
  2. 使用它们来填充数组。
  3. 对数组进行排序。
  4. 将数组用作地图。

(您不能将有序数据存储在对象中)。

如果要将结果存储在 JSON 中,则需要更改数据结构(并使用(对象)数组)。对象是明确无序的。

于 2012-07-05T14:07:43.257 回答
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]));
 }
于 2012-07-05T14:10:54.740 回答
1

我同意 Amberlamps 的评论,你不应该尝试对对象的键进行排序,如果你出于某种原因想要这样做,你可以看看underscore.js 的 sortBy 方法

于 2012-07-05T14:08:33.613 回答
1

即使您可以对对象属性进行排序,也不能保证您可以按排序顺序读回它们。在 Javascript 中,对象属性不是按特定顺序存储的;一个对象只是具有属性。

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

于 2012-07-05T14:12:28.640 回答