我下面有一个包含多个订单条目的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"}}
]
答案 0 :(得分:0)
您的逻辑问题是,您使用一个循环并为每个客户条目保存客户,而不是为每个订单保存一次。
为此,请创建一个映射,该映射使用ORDER_ID作为每个条目的键,并以客户数组作为其值。
然后,您可以遍历该地图的键集,并根据每个键的数组值创建“客户”对象。
我意识到stackoverflow希望我实际编写答案并将其发布,但我认为这对我没有用。