当前位置: 首页 > 面试题库 >

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

蔺沛
2023-03-14
问题内容

我收到来自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);

问题答案:

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

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

参考1:

键的顺序未定义

参考2:

对象是名称/值对的无序集合



 类似资料:
  • 我正在编写一个Netty应用程序(Netty 4),其中处理每条消息可能需要一些时间。作为我的意思的一个例子,我创建了一个,它用原始消息响应,尽管有时会在短时间延迟后响应: 使用此代码,不能保证响应的顺序与传入请求的顺序相同。事实上,如果第一条消息由字符串“delay”和其他字符串的第二条组成,则响应的顺序将颠倒!我写了一个测试来说明这一点: 我正在寻找Netty中的内置方式,以确保传出响应的顺序

  • 问题内容: 好的,我认为这可能是一个老问题,但是我在stackoverflow上没有发现任何东西。在go中,不保证地图上的迭代顺序是可重现的。因此,建议的方法是将键保留在一个切片中并对该切片进行排序。然后,对该切片进行迭代以从映射中检索值,以便我们按顺序获取它们(因为由键组成的切片已排序,因此将以可再现的顺序排列)。因此,这意味着需要对切片进行排序,否则切片上的迭代也不会给出可重现的顺序。但是,当

  • 问题 你有一系列排序序列,想将它们合并后得到一个排序序列并在上面迭代遍历。 解决方案 heapq.merge() 函数可以帮你解决这个问题。比如: >>> import heapq >>> a = [1, 4, 7, 10] >>> b = [2, 5, 6, 11] >>> for c in heapq.merge(a, b): ... print(c) ... 1 2 4 5 6 7

  • 问题内容: 我正在使用JSONObject来删除JSON字符串中不需要的certin属性: 它可以正常工作,但是问题是JSONObject是“名称/值对的无序集合”,我想保持String在通过JSONObject操作之前的原始顺序。 任何想法如何做到这一点? 问题答案: 你不能 这就是为什么我们称其 为名称/值对的无序集合 。 我不确定为什么需要这样做。但是,如果要订购,则必须使用json数组。

  • 所以我有一张表,它看起来像这样: 我们依赖该表根据进行分页来正确排序。 问题是:当从cassandra返回结果时,看起来它们是根据ASCII值而不是逻辑的A-Z排序进行排序的。-对于观看它的人来说,这在程序上是有意义的,但在逻辑上是不合理的。 是否有一个选项来改变当前聚类顺序的方法? -或者另一种逻辑排序的方法?

  • 对于以下地图: 这是代码。。。 ...保证两次打印相同的序列? 如果没有,在例如< code>java.util.HashMap中是否有任何保证?