值由JSONObject构造函数重新排列

时间:2012-09-07 14:13:50

标签: android json

我有这个:

String foo = 

    "options": {
      "1",
      "2",
      "3",
      "4",
      "5",
      "6",
      "7",
      "8",
      "9",
    }

但是JSONObject构造函数会重新排列键:

new JSONObject(foo).toString() = 

    "options": {
      "6",
      "3",
      "7",
      "2",
      "5",
      "1",
      "4",
      "8",
      "9",
    }

新订单是可重复的,这意味着每次执行都会导致相同(看似随机)的重新排列。

3 个答案:

答案 0 :(得分:1)

在json序列中,字段并不重要,只有它们的嵌套。

答案 1 :(得分:1)

您的示例Strings是无效的JSON。您有一个裸露的顶级字段options,并且没有该字段的值。

javascript 对象,它是JSON表示,特别是JSONObject,不保证字段的排序。

来自JSONObject javadoc

  

JSONObject是名称/值对的无序集合。

可以使用数组维护排序。因此,如果您的数据是或可以表示为数组 - 从您的示例中看起来就像一个数组 - 那么元素的顺序将保持

答案 2 :(得分:1)

对我来说,这看起来不像是有效的JSON。首先,整个字符串周围没有{}[]。其次,看起来与options相关联的数据应该在内部,而数组([])不是对象({})。如果它是一个数组,则会保留该顺序,而将这些值声明为属性,则无法保证其顺序。