Java 如何比较同一JSONObject中的条目

Java 如何比较同一JSONObject中的条目,java,json,Java,Json,我在下面有一个JSONObject,它包含多个订单条目 {"ORDER_1": {"FNAME" : "JOHN","LNAME" : "B","ORDER_ID" : "D123"}, "ORDER_2": {"FNAME" : "LAURA","LNAME" : "S","ORDER_ID" : "D456"}, "ORDER_3": {"FNAME" : "JACK","LNAME" : "H","ORDER_ID" : "D123"}} 下面是我动态收集客户信息并

我在下面有一个JSONObject,它包含多个订单条目

   {"ORDER_1": {"FNAME" : "JOHN","LNAME" : "B","ORDER_ID" : "D123"},
    "ORDER_2": {"FNAME" : "LAURA","LNAME" : "S","ORDER_ID" : "D456"},
    "ORDER_3": {"FNAME" : "JACK","LNAME" : "H","ORDER_ID" : "D123"}}
下面是我动态收集客户信息并将其放入JSONObject的hashset中的代码

    Set<JSONObject> customerCollection = new HashSet<JSONObject>();
    Iterator<String> keys = (Iterator<String>) customerOrders.keys();
    while (keys.hasNext()) {
        String key = keys.next();
        JSONObject obj = customerOrders.getJSONObject(key);

        JSONObject result = new JSONObject();
        JSONArray customerList = new JSONArray();

        JSONObject customer = new JSONObject();
        JSONObject customerObj = new JSONObject();

        customer.put("FNAME", obj.optString("FNAME"));
        customer.put("LNAME", obj.optString("LNAME"));
        customerObj.put("customer", customer);
        customerList.add(customerObj);
        result.put("customers", customerList);

        customerCollection.add(result);
    }
现在有一项要求是对共享相同订单ID的客户进行分组。这就是我有点挣扎的地方。如何比较同一JSONObject的条目并根据ORDER_ID键值将它们分组?所以最终的输出应该是这样的(注意到客户JOHN和JACK现在在同一个JSONArray中,因为他们共享相同的订单号)


逻辑的问题在于,您使用的是单个循环,并为每个客户条目保存客户,而不是为每个订单保存一次

为此,创建一个映射,使用ORDER_ID作为每个条目的键,并将客户数组作为其值

然后,您可以迭代该映射的键集,并根据每个键的数组值创建“customers”对象


我意识到stackoverflow希望我实际编写答案并将其发布,但我认为(对我来说)这是没有成效的。

只是澄清一下,您的初始JSON输入是否应该在ORDER-1、ORDER-2和ORDER-3值周围加上双引号?订单1订单2订单3的目的是什么?为什么不简单地使用:{“orders”:[{“FNAME”:“JOHN”,“LNAME”:“B”,“ORDER_ID”:“D123”},{“FNAME”:“劳拉”,“LNAME”:“S”,“ORDER_ID”:“D456”},{“FNAME”:“JACK”,“LNAME”:“H”,“ORDER_ID”:“D123”}您可以解析Json进行映射(可能正在使用JsonPath)然后在地图上把他们分组。之后,您可以将其转换回Json。此外,您的预期输出也没有意义,因为它不会将每个客户数组与任何订单关联。我认为您应该使用ORDER_ID值,而不是“customers”,这样您就可以在订单和该订单的客户数组之间建立关联。谢谢,我已经用正确的双引号更新了初始JSON输入。至于我的预期输出,这是格式,我不能更改它。这里的目标是根据订单ID将客户名称分组在一起。
[{"customers": [{"name": {"fname": "JOHN","lname": "B"}}]},
 {"customers": [{"name": {"fname": "LAURA","lname": "S"}}]},
 {"customers": [{"name": {"fname": "JACK","lname": "H"}}]}]
[
    {
     "customers": [{"name": {"fname": "JOHN","lname": "B"}},
                   {"name": {"fname": "JACK","lname": "H"}}
                  ]
    },
    {"customers": [{"name": {"fname": "LAURA","lname": "S"}}
]