当迭代JsonObject的密钥时,它们的顺序与服务器的响应顺序不同

我从JSON字符串的服务器得到了非常大的响应。 我将它转换为JSON对象,然后获取密钥并迭代它。

问题是,当我迭代时,它的顺序与服务器的响应顺序不同。

接下来,我通过添加List所有键并对其进行排序来应用另一个方法,然后获取它的迭代器,但仍然不是我需要的(如响应中)。

代码示例如下:

 JSONObject jsonObject = new JSONObject(responseString); Iterator myIter = jsonObject.keys(); List sortKey = new ArrayList(); while(myIter.hasNext()){ sortKey.add(myIter.next()); } Collections.sort(sortKey); 

JSON对象的键的顺序不应该是有意义的。 如果需要特定订单,则应使用数组,而不是对象。

您的Java代码按字母顺序对键进行排序。 无法获得对象中键的初始排序。

参考文献1 :

键的顺序是未定义的

参考2 :

对象是一组无序的名称/值对

您可以使用Sorted map将键和值放入。 像这样的东西

  public static List listFromJsonSorted(JSONObject json) { if (json == null) return null; SortedMap map = new TreeMap(); Iterator i = json.keys(); while (i.hasNext()) { try { String key = i.next().toString(); JSONObject j = json.getJSONObject(key); map.put(key, j); } catch (JSONException e) { e.printStackTrace(); } } return new LinkedList(map.values()); } 

我在我的Android应用程序中处理部分时遇到了类似的问题,该应用程序按字母顺序显示1024个以上的网站列表。 由于json遍历不是按排序顺序,我只是在遍历期间将json值插入表(我在我的应用程序中使用列表适配器)并获得带有光标的网站排序列表。

因此,如果要保存从服务器获取的内容,则只需查询数据库即可按所需顺序对值进行排序。