自己写的,欢迎补漏。
其实是以第一个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;try{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){try{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("-------------------------");}}}});}

测试一下:

    public static void main(String[] args) {jsonDiff(Paths.get("/Users/lvshihao/Documents/kz1"),Paths.get("/Users/lvshihao/Documents/kz2"));}

效果如图:

/代表子父级关系,如图上的数字代表数组的下标。

java比较两个json文件的差异相关推荐

  1. 两个JSON文件比较差异 (O_o)

    前言:有个需求需要写一份JSON文件对比差异且将差异的JSON输出的脚本,每个文件的数据量大约在10万条(40 MB 上下的两份文件) JSON 格式为列表套字典的格式 [{"ID" ...

  2. java对比俩个word文件内容差异

    java对比俩个word文件内容差异 添加依赖: <dependency><groupId>e-iceblue</groupId><artifactId> ...

  3. pythoncsv表格对比_对比两个csv文件记录差异

    搜索热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. # -*- coding:utf-8 -*- import csv import ...

  4. python 比较两个json文件

    python 比较两个json文件 法1:利用json_tools类库中的方法 安装pip install json_tools 使用json_tools.diff(old,new) 输出 : new ...

  5. JAVA生成并导出json文件

    将一个list集合转换成json文件并导出: 数据集合: List<Object> agencyList = new ArrayList<Object>();Map<St ...

  6. Java实现两个csv文件的对比_Java实现CSV文件差异对比

    在项目中经常会遇到使用CSV文件,比如从HR中得到的文件拿到其它地方去处理,实际会需要得到当前和上次文件中的差异,比如:添加,删除,修改, 那么如何来实现呢,可能有很的方法,在这里我说一下我的实现方法 ...

  7. Java 比较两个Word文档差异

    本文介绍使用Spire.Doc for Java的比较功能来比较两个相似Word文档的差异.需要使用的版本为3.8.8或者后续发布的新版本.可下载jar包,解压将lib文件夹下的Spire.doc.j ...

  8. java合并两个doc文件,java实现合并2个文件中的内容到新文件中

    编写一个程序 将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中 a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔. 复制代码 代码如下: packag ...

  9. java 实现两个pdf文件 合并为一个pdf 文件

    package test; import java.io.FileOutputStream;   import com.lowagie.text.Document;   import com.lowa ...

最新文章

  1. Aras学习笔记(1)学习Aras已半年有余,也积攒一些学习笔记,今天起会陆续分享出来,有兴趣的朋友一起交流...
  2. IBM 消费者洞察报告,揭示 5G 娱乐时代的三大关键趋势
  3. 【转】微信扫描二维码登录网页是什么原理?
  4. 小程序完整对接 pingpp支付
  5. uc通讯不成功php版本过高,Ucenter通信失败排查方法
  6. 程序员你真的理解final关键字吗?
  7. (转)Spring提供的CharacterEncoding和OpenSessionInView功能
  8. 阿里影业宣布新战略:“新基础设施”赋能电影产业
  9. 用友功能传送错误功能加密服务器组件加密服务器错误拒绝访问,用友U8v8.72单机版,登录时系统提示:不能登录到加密服务器。-用友U8...
  10. 第 7 章 本地方法栈
  11. 电驴创始人Jed McCaleb的传奇人生
  12. 商业创业融资计划书PPT模板
  13. Unity Shader 实现PS图层混合效果
  14. TFASR 开源语音识别项目解构
  15. 收到QQ尾巴 Worm.QQ.TopFox.bo 送来的“我的近照11.zip”
  16. GTS、GCK,GSR全称
  17. vue设置页面滚动高度_vue 解决无法设置滚动位置的问题
  18. 白盒测试及其基本方法
  19. MDK安装包的精简以及绿化方法
  20. 教你如何分辨绿杨春茶的真假新旧?

热门文章

  1. matlab人体轮廓识别,人体动作识别代码,求问这是提取的什么轮廓信息
  2. 让梦想照进现实,运动框架再次递进
  3. 知识图谱 | (2)知识图谱技术综述(上)
  4. python识别图像中的物体_python爬虫-利用百度api识别照片中的物体
  5. Matlab/Simulink之STM32开发
  6. python opencv关闭摄像头自动白平衡(white balance)
  7. ofdm系统matlab仿真论文,基于MATLAB的OFDM仿真(SIMULINK仿真)
  8. 值得一用的日报管理系统
  9. 安卓 GPS定位程序APP 闪退问题
  10. 带你一起学习C语言语法