java比较两个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;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文件的差异相关推荐
- 两个JSON文件比较差异 (O_o)
前言:有个需求需要写一份JSON文件对比差异且将差异的JSON输出的脚本,每个文件的数据量大约在10万条(40 MB 上下的两份文件) JSON 格式为列表套字典的格式 [{"ID" ...
- java对比俩个word文件内容差异
java对比俩个word文件内容差异 添加依赖: <dependency><groupId>e-iceblue</groupId><artifactId> ...
- pythoncsv表格对比_对比两个csv文件记录差异
搜索热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. # -*- coding:utf-8 -*- import csv import ...
- python 比较两个json文件
python 比较两个json文件 法1:利用json_tools类库中的方法 安装pip install json_tools 使用json_tools.diff(old,new) 输出 : new ...
- JAVA生成并导出json文件
将一个list集合转换成json文件并导出: 数据集合: List<Object> agencyList = new ArrayList<Object>();Map<St ...
- Java实现两个csv文件的对比_Java实现CSV文件差异对比
在项目中经常会遇到使用CSV文件,比如从HR中得到的文件拿到其它地方去处理,实际会需要得到当前和上次文件中的差异,比如:添加,删除,修改, 那么如何来实现呢,可能有很的方法,在这里我说一下我的实现方法 ...
- Java 比较两个Word文档差异
本文介绍使用Spire.Doc for Java的比较功能来比较两个相似Word文档的差异.需要使用的版本为3.8.8或者后续发布的新版本.可下载jar包,解压将lib文件夹下的Spire.doc.j ...
- java合并两个doc文件,java实现合并2个文件中的内容到新文件中
编写一个程序 将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中 a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔. 复制代码 代码如下: packag ...
- java 实现两个pdf文件 合并为一个pdf 文件
package test; import java.io.FileOutputStream; import com.lowagie.text.Document; import com.lowa ...
最新文章
- Aras学习笔记(1)学习Aras已半年有余,也积攒一些学习笔记,今天起会陆续分享出来,有兴趣的朋友一起交流...
- IBM 消费者洞察报告,揭示 5G 娱乐时代的三大关键趋势
- 【转】微信扫描二维码登录网页是什么原理?
- 小程序完整对接 pingpp支付
- uc通讯不成功php版本过高,Ucenter通信失败排查方法
- 程序员你真的理解final关键字吗?
- (转)Spring提供的CharacterEncoding和OpenSessionInView功能
- 阿里影业宣布新战略:“新基础设施”赋能电影产业
- 用友功能传送错误功能加密服务器组件加密服务器错误拒绝访问,用友U8v8.72单机版,登录时系统提示:不能登录到加密服务器。-用友U8...
- 第 7 章 本地方法栈
- 电驴创始人Jed McCaleb的传奇人生
- 商业创业融资计划书PPT模板
- Unity Shader 实现PS图层混合效果
- TFASR 开源语音识别项目解构
- 收到QQ尾巴 Worm.QQ.TopFox.bo 送来的“我的近照11.zip”
- GTS、GCK,GSR全称
- vue设置页面滚动高度_vue 解决无法设置滚动位置的问题
- 白盒测试及其基本方法
- MDK安装包的精简以及绿化方法
- 教你如何分辨绿杨春茶的真假新旧?
热门文章
- matlab人体轮廓识别,人体动作识别代码,求问这是提取的什么轮廓信息
- 让梦想照进现实,运动框架再次递进
- 知识图谱 | (2)知识图谱技术综述(上)
- python识别图像中的物体_python爬虫-利用百度api识别照片中的物体
- Matlab/Simulink之STM32开发
- python opencv关闭摄像头自动白平衡(white balance)
- ofdm系统matlab仿真论文,基于MATLAB的OFDM仿真(SIMULINK仿真)
- 值得一用的日报管理系统
- 安卓 GPS定位程序APP 闪退问题
- 带你一起学习C语言语法