将有序JSON响应结果解析为无序对象

时间:2013-01-27 02:20:43

标签: javascript json response

我正在从已经按“sort_id”排序的服务器检索JSON响应。

responseText ==>

{
    "status": 1,
    "complete": 1,
    "list": {
        "178432351": {
            "item_id": "178432351",
            "sort_id": 0,
        },
        "203720680": {
            "item_id": "203720680",
            "sort_id": 1,
        },
        "286082053": {
            "item_id": "286082053",
            "sort_id": 2,
        },
        "284062632": {
            "item_id": "284062632",
            "sort_id": 3,
        },
        "16137955": {
            "item_id": "16137955",
            "sort_id": 4
        }
    },
    "since": 1359248876
}

var response = JSON.parse(request.responseText);

一旦我用JSON.parse将它解析成一个对象,然后尝试通过

打印每个项目的数据
for(item in response)

打印的数据完全无序。有没有办法通过sort_id顺序使用“for in”循环?或以任何其他方式打印收到的数据。

2 个答案:

答案 0 :(得分:1)

var arr = [];  

for(var item in b.list) { 
   var obj = b.list[item]; 
   var elem = {}; 
   for(var prop in obj) {
      elem[prop] = obj[prop];
   } 
  arr.push(elem);
}

arr.sort(function(a,b) { return parseInt(a.sort_id) - parseInt(b.sort_id) } );

答案 1 :(得分:1)

默认情况下,Javascript属性是无序的,并且它们在javascript引擎和实现中的迭代顺序不一致。要订购属性,您需要有一个数组。

要对属性进行排序,您可以将它们放入数组中,正如thikinom的回答所示。