昨天说了下对key值相同的json数据进行相加合并,今天来说一下要是还有其他的键值对要进行拼接如何操作,话不多说,上代码:
@Test
public void sd() {
String str = "{ \"total\": 5, \"data\": [{ \"belongdepname\": \"测试组织\", \"userid\": \"ityj_heyh8\", \"tasknum\": \"66\" }, { \"belongdepname\": \"测试组织\", \"userid\": \"it_nixue\", \"tasknum\": \"9\" }, { \"belongdepname\": \"综合部\", \"userid\": \"it_xiacl\", \"tasknum\": \"8\" }, { \"belongdepname\": \"测试组织\", \"userid\": \"it_yaojw\", \"tasknum\": \"6\" }{ \"belongdepname\": \"厂商\", \"userid\": \"itym\", \"tasknum\": \"4\" }], \"message\": \"请求成功\", \"status\": \"success\"}";
JSONObject obj = JSON.parseObject(str);
JSONArray array = obj.getJSONArray("data");
List<JSONObject> result = Lists.newArrayList();
Map<String, JSONObject> map = Maps.newHashMap();
array.forEach(object -> {
if (object instanceof JSONObject) {
JSONObject data = (JSONObject) object;
String key = data.getString("belongdepname");
JSONObject tmp = map.get(key);
if (tmp == null) {
tmp = new JSONObject();
tmp.putAll(data);
} else {
tmp.put("userid", tmp.get("userid") + "," + data.get("userid"));
tmp.put("tasknum", tmp.getInteger("tasknum") + data.getInteger("tasknum"));
}
map.put(key,tmp);
}
});
map.forEach((k,v)->{
result.add(v);
});
System.out.printf("---->"+JSON.toJSONString(result));
}
如果要放到jsonArray里面,可以直接进行下面操作
jsonArray1.addAll(result);
希望能帮到需要的人,欢迎点赞评论,谢谢。