ParseJSON对我的json数据进行排序

时间:2015-01-27 08:57:37

标签: javascript ajax json

我有一个简单的ajax调用,如下所示:

var data = jQuery.parseJSON(response.d);

response.d内容为:

{"d":"[[{\"ExtensionData\":{},\"categoryId\":\"Help\"}],{\"11\":\"This is 11\",\"10\":\"This is 10\",\"7\":\"This is 7\",\"6\":\"This is 6\",\"12\":\"This is 12\",\"5\":\"This is 5\",\"4\":\"This is 4\",\"2\":\"This is 2\",\"1\":\"This is 1\"}]"}

当我运行代码并查看包含的数据时,它看起来像这样:

  1. "这是1"
  2. "这是2"
  3. "这是3"
  4. "这是4"
  5. "这是5"
  6. "这是6"
  7. ......等等,你明白了。它为什么突然排序?如何关闭" autosort"?

2 个答案:

答案 0 :(得分:12)

永远不能保证在JavaScript中反序列化和序列化之间保留对象键顺序。保证密钥顺序的唯一方法是提取对象的密钥并根据确定性标准对其进行排序,即为了保证顺序,您必须使用数组。

编辑:

问题的一种可能解决方案是将对象键的数组包含在中,以将键值集合(原始对象)包含到服务器响应中。通过迭代有序键,您可以按照所需的顺序访问对象。

E.g。

var data = { 
    values: { /* your original object here */ },
    /* keep a record of key order and include the keys as an array 
       in your response. That way you can guarantee order. */
    keys: [11, 10, 7, 6, 12, 5, 4, 2, 1]
};

data.keys.forEach(function (key) {
   var value = data.values[key];

   /* do work here */
});

答案 1 :(得分:-2)

jQuery.parseJSON();不会对您的对象进行排序。但有些浏览器会在渲染后对对象进行排序。有关说明,请参阅here