展开全部
要判断json数据的字段62616964757a686964616fe78988e69d8331333365636634与其他数据是否相同,那么肯定是要先解析json数据。解析json数据的方式很多,Gson、FastJson都是很简便实用的工具。这里以Gson为例。import java.lang.reflect.Type;
import java.util.*;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class Divination {
public static void main(String[] args) {
String jsonStr = "[{\"depid\":\"5\",\"score\":\"10\"},{\"depid\":\"4\",\"score\":\"40\"},{\"depid\":\"4\",\"score\":\"30\"},{\"depid\":\"5\",\"score\":\"30\"}]";
System.out.println("原始的json字符串:" + jsonStr);
// 解析
Gson gson = new Gson();
Type type = new TypeToken>() {
}.getType();
ArrayList list = gson.fromJson(jsonStr, type);
// 合并
List ordered = new ArrayList<>();
Map map = new HashMap<>();
for (JsonData jsonData : list) {
JsonData data = map.get(jsonData.getDepid());
if (data != null) { // depid相同的合并score字段
data.setScore(data.getScore() + jsonData.getScore());
} else {
map.put(jsonData.getDepid(), jsonData);
ordered.add(jsonData);
}
}
// 还原为json字符串
System.out.println("合并后json字符串:" + gson.toJson(map.values()));
System.out.println("合并后json字符串(按原来的顺序):" + gson.toJson(ordered));
}
}
class JsonData {
private int depid;
private int score;
public int getDepid() {
return depid;
}
public void setDepid(int depid) {
this.depid = depid;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
以上代码中List ordered = new ArrayList<>();是为了按原json数组的顺序输出合并后的结果,如果对顺序无要求可以删除相关代码。
运行结果: