java比较两个json文件的差异及说明
作者:凉薄不凉薄啊
这篇文章主要介绍了java比较两个json文件的差异及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
比较两个json文件的差异
其实是以第一个json文件为准,查看第二个对比第一个的差异。
public static JSONArray sortJsonArray(JSONArray array) {
List<Object> list = array.toJavaList(Object.class);
list.sort(Comparator.comparing(Object::toString));
return JSON.parseArray(JSON.toJSONString(list));
public static void jsonDiff(Path p1, Path p2){
String j1="",j2="";
try {
j1 = FileUtils.readFileToString(p1.toFile(), Charset.defaultCharset());
j2 = FileUtils.readFileToString(p2.toFile(), Charset.defaultCharset());
} catch (IOException e) {
System.out.println("文件读取异常!"+e.getMessage());
return;
Map map1=null,map2=null;
map1 = JSON.parseObject(j1, Map.class);
map2 = JSON.parseObject(j2, Map.class);
}catch (Exception e){
System.out.println("文件格式异常!"+e.getMessage());
return;
if(map1!=null&&map2!=null){
resolvingMap(map1,map2,"");
public static void resolvingMap(Map map1,Map map2,String parent){
map1.forEach((k,v)->{
if(!map2.containsKey(k)){
System.out.println("缺少字段{"+parent+"/"+k+"}");
}else{
if(v instanceof JSONObject){
resolvingMap(JSON.parseObject(JSON.toJSONString(v),Map.class), JSON.parseObject(JSON.toJSONString(map2.get(k)),Map.class),parent+"/"+k);
} else if(v instanceof JSONArray){
JSONArray object1 = sortJsonArray((JSONArray) v);
JSONArray object2 = sortJsonArray(JSON.parseArray(JSON.toJSONString(map2.get(k))));
for (int i = 0; i < object1.size(); i++) {
HashMap<String, Object> hs1 = new HashMap<>();
HashMap<String, Object> hs2 = new HashMap<>();
hs1.put(String.valueOf(i),object1.get(i));
try {
hs2.put(String.valueOf(i),object2.get(i));
}catch (Exception e){
System.out.println("数组字段存在问题{"+parent+"/"+k+"["+i+"]}");
resolvingMap(hs1,hs2,parent+"/"+k);
}catch (Exception e){
System.out.println("数组信息错误{"+parent+"/"+k+"}");
}else {
if(!v.equals(map2.get(k))){
System.out.println("字段值不一致{"+parent+"/"+k+"}");
System.out.println(v+"====>"+map2.get(k));
System.out.println("-------------------------");
测试一下: