0

我有这个:

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",
    }

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

4

3 回答 3

1

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

于 2012-09-07T14:15:30.453 回答
1

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

一个 javascript object,它是 JSON 表示,特别是 a JSONObject,不保证字段的顺序。

JSONObject javadoc

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

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

于 2012-09-07T14:16:47.570 回答
1

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

于 2012-09-07T14:17:13.750 回答