【问题标题】:ParseJSON sorts my json dataParseJSON 对我的 json 数据进行排序
【发布时间】:2015-01-27 08:57:36
【问题描述】:

我有一个简单的 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”

...等等,你明白了。怎么突然就整理好了?如何关闭“自动排序”?

【问题讨论】:

  • parseJSON() 不排序。可能这与您遍历结果数组的方式更相关。
  • @Sirko:parseJSON根本没有排序。没有“真的”。
  • @RangerChris:如果您不显示如何您获得该输出,我们如何提供帮助?
  • 好吧,我只能看到我从服务中获得的数据看起来不错。如果我解析 json,数据是有序的,当我用一个简单的 for 循环循环它们时,它们会以有序的方式出现。

标签: javascript ajax json


【解决方案1】:

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

编辑:

您的问题的一个可能解决方案是在您的服务器响应中包含一个对象键数组除了到您的键值集合(原始对象)中。通过遍历有序键,您可以按您想要的顺序访问对象。

例如

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 */
});

【讨论】:

  • 为了将它添加到我的下拉列表中,我需要一个值和一个文本。那么,我要创建两个数组吗?
  • @RangerChris 好吧,一种方法是保持包含键值对的对象不变,但另外包括一个数组,其中包含根据需要排序的对象键。
  • @RangerChris 我在答案中添加了一个代码 sn-p,希望能帮助澄清我建议的解决方案。
  • 我重新编写了我的代码,所以现在我使用了一个数组,它的工作原理就像它应该的那样。非常感谢。
  • @RangerChris 乐于提供帮助。
【解决方案2】:

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

【讨论】:

  • 这是不正确的,如果键是整数,它们会被排序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 2012-11-06
  • 2019-05-05
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多