如何比较同一JSONObject中的条目

时间:2018-08-31 13:53:38

标签: 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散列集中的代码

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

根据上面的代码,输出的格式如下:

[{"customers": [{"name": {"fname": "JOHN","lname": "B"}}]},
 {"customers": [{"name": {"fname": "LAURA","lname": "S"}}]},
 {"customers": [{"name": {"fname": "JACK","lname": "H"}}]}]

现在需要对共享相同ORDER_ID的客户进行分组。这就是我有点挣扎的地方。如何比较相同JSONObject的条目,并根据ORDER_ID键值将它们分组在一起?因此,最终输出应该是这样的(注意,客户JOHN和JACK现在位于同一JSONArray中,因为它们共享相同的ORDER_ID)

[
    {
     "customers": [{"name": {"fname": "JOHN","lname": "B"}},
                   {"name": {"fname": "JACK","lname": "H"}}
                  ]
    },
    {"customers": [{"name": {"fname": "LAURA","lname": "S"}}
]

1 个答案:

答案 0 :(得分:0)

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

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

然后,您可以遍历该地图的键集,并根据每个键的数组值创建“客户”对象。

我意识到stackoverflow希望我实际编写答案并将其发布,但我认为这对我没有用。