第一组JSON:
[{"id":"206","name":"携程旅行网","create_user":"admin"},{"id":"208","name":"美团点评","create_user":"admin"},{"id":"218","name":"杭州飞猪","create_user":"admin"},{"id":"228","name":"艺龙网","create_user":"admin"}]
第二组JSON:
[{"id":"206","bfjl":"3","bfdate":"2021-10-11"},{"id":"228","bfjl":"13","bfdate":"2021-10-13"}]
需要的结果,根据ID相同,连接JSON,不存在的自动空值:
[{"id":"206","name":"携程旅行网","create_user":"admin","bfjl":"3","bfdate":"2021-10-11"},{"id":"208","name":"美团点评","create_user":"admin","bfjl":"","bfdate":""},{"id":"218","name":"杭州飞猪","create_user":"admin","bfjl":"","bfdate":""},{"id":"228","name":"艺龙网","create_user":"admin","bfjl":"13","bfdate":"2021-10-13"}]
请帮忙解答
class OneData {
public String id;
public String name;
public String create_user;
}
class TwoData {
public String id;
public String bfjl;
public String bfdate;
}
class Result {
public String id;
public String name;
public String create_user;
public String bfjl;
public String bfdate;
}
public ArrayList<Result> converJson() {
//结果集
ArrayList<Result> result_list = new ArrayList<>();
//step1: 转换数据
// 第一组JSON:
String json_one = "[{\"id\":\"206\",\"name\":\"携程旅行网\",\"create_user\":\"admin\"},{\"id\":\"208\",\"name\":\"美团点评\",\"create_user\":\"admin\"},{\"id\":\"218\",\"name\":\"杭州飞猪\",\"create_user\":\"admin\"},{\"id\":\"228\",\"name\":\"艺龙网\",\"create_user\":\"admin\"}]";
ArrayList<OneData> Data_one = new Gson().fromJson(json_one, new TypeToken<ArrayList<OneData>>() {
}.getType());
String json_two = "[{\"id\":\"206\",\"bfjl\":\"3\",\"bfdate\":\"2021-10-11\"},{\"id\":\"228\",\"bfjl\":\"13\",\"bfdate\":\"2021-10-13\"}]";
ArrayList<TwoData> Data_two = new Gson().fromJson(json_two, new TypeToken<ArrayList<TwoData>>() {
}.getType());
//step2: 筛选存储数据,组转数据
//为什么不直接在 for 嵌套 for 对比查询呢?因为这样不止耗时,如果逻辑过多,容易出错
if (Data_two.size() > Data_one.size()) {
HashMap<String, OneData> hashMap = new HashMap<>();
for (OneData oneData : Data_one) {
hashMap.put(oneData.id, oneData);
}
for (TwoData twoData : Data_two) {
Result result = new Result();
result.id = twoData.id;
result.bfjl = twoData.bfjl;
result.bfdate = twoData.bfdate;
if (hashMap.containsKey(result.id)) {
result.name = hashMap.get(result.id).name;
result.create_user = hashMap.get(result.id).create_user;
}
result_list.add(result);
}
} else {
HashMap<String, TwoData> hashMap = new HashMap<>();
for (TwoData twoData : Data_two) {
hashMap.put(twoData.id, twoData);
}
for (OneData oneData : Data_one) {
Result result = new Result();
result.id = oneData.id;
result.bfjl = oneData.name;
result.bfdate = oneData.create_user;
if (hashMap.containsKey(result.id)) {
result.id = hashMap.get(result.id).id;
result.bfjl = hashMap.get(result.id).bfjl;
result.bfdate = hashMap.get(result.id).bfdate;
}
result_list.add(result);
}
}
return result_list;
}
用数组的forEach方法嵌套循环判断,key相同的再做逻辑处理。
先转成两个list,然后用对象判断,组合成新的list,json转list用gson开源库即可。
辛苦了,感谢