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

2022-09-02 01:14:00

我有一个非常大的响应来自JSON字符串的服务器。我将其转换为JSON对象,然后获取密钥并对其进行迭代。

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

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

代码示例如下:

JSONObject jsonObject = new JSONObject(responseString);
    Iterator<String> myIter = jsonObject.keys();


    List<String> sortKey = new ArrayList<String>();

    while(myIter.hasNext()){
        sortKey.add(myIter.next());
    }
    Collections.sort(sortKey);

答案 1

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

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

参考资料 1

键的顺序未定义

参考资料 2

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


答案 2

您可以使用排序映射将键和值放入其中。类似的东西

 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());
}