使用JSONassert进行JSON对象对比
在日常工作中,会接到用户提出一张订单,修改后需要记录每次修改的信息,然后需要查看修改前后的差异信息这样的需求。要实现这样的功能方式有很多。下面介绍下JSONassert
的简单使用,也方便自己后续使用查看。
JSONassert GitHub地址:https://github.com/skyscreamer/JSONassert
1、准备
Maven依赖:
<dependency>
<groupId>org.skyscreamer</groupId>
<artifactId>jsonassert</artifactId>
<version>1.5.0</version>
<scope>test</scope>
</dependency>
初始化数据:
private Grade getBeforeGrade(){
Grade grade = new Grade();
grade.setCode("A01");
grade.setName("三年级1班");
List<Student> students = Lists.newArrayList();
students.add(new Student().setCode("001").setName("小A"));
students.add(new Student().setCode("002").setName("小B"));
grade.setStudents(students);
return grade;
}
private Grade getAfterGrade(){
Grade grade = new Grade();
grade.setCode("A02");
grade.setName("三年级2班");
List<Student> students = Lists.newArrayList();
students.add(new Student().setCode("001").setName("小A"));
students.add(new Student().setCode("003").setName("小C"));
grade.setStudents(students);
return grade;
}
2、简单使用
CustomComparator customComparator = new CustomComparator(JSONCompareMode.NON_EXTENSIBLE);
try {
JSONCompareResult result = JSONCompare.compareJSON(JSON.toJSONString(before), JSON.toJSONString(after), customComparator);
result.getFieldFailures().forEach(fieldComparisonFailure -> {
System.out.println(String.format("变更字段:%s,变更前值:%s,变更后值:%s",fieldComparisonFailure.getField(),fieldComparisonFailure.getExpected(),fieldComparisonFailure.getActual()));
});
}catch (Exception e){
e.printStackTrace();
}
输出结果:
变更字段:name,变更前值:小A,变更后值:小B
3、扩展功能
3.1、排除不需要对比的字段
CustomComparator customComparator = new CustomComparator(JSONCompareMode.NON_EXTENSIBLE,
new Customization("name",(o1,o2)->true));
--------------------------------------------------------------
输出结果:
变更字段:code,变更前值:A01,变更后值:A02
如果JSON对象里面有集合,对比时也需要排除:
ArrayValueMatcher<Object> arrayValueMatcher = new ArrayValueMatcher(new CustomComparator(JSONCompareMode.NON_EXTENSIBLE,
new Customization("students[*].code",(o1,o2)->true)));
CustomComparator customComparator = new CustomComparator(JSONCompareMode.NON_EXTENSIBLE,
new Customization("name",(o1,o2)->true),
new Customization("students",arrayValueMatcher));
------------------------------------------------------------
输出结果:
变更字段:code,变更前值:A01,变更后值:A02
变更字段:students[1].name,变更前值:小B,变更后值:小C
使用JSONassert进行JSON对象对比的更多相关文章
- 一个Json结构对比的Python小工具兼谈编程求解问题
先上代码. jsondiff.py #!/usr/bin/python #_*_encoding:utf-8_*_ import argparse import json import sys rel ...
- XML与JSON的对比
XML与JSON的对比 1.各自定义 XML 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类 ...
- Highcharts ajax获取json对象动态生成报表生成 .
http://blog.csdn.net/wsk7860/article/details/8751061 最近做个项目,项目经理想做一个统计报表,在网上查看些资料就选用Highchars 这里和大家分 ...
- Highcharts axja 获取json对象动态生成报表生成
最近做个项目,项目经理想做一个统计报表,在网上查看些资料就选用Highchars 这里和大家分享下使用心得. 重点说明此代码是针对一个报表显示多个项对比显示. 直接贴代码:web端 <scrip ...
- java中的JSON对象的使用
申明:没工作之前都没听过JSON,可能是自己太菜了.可能在前台AJAX接触到JSON,这几天要求在纯java的编程中,返回JSON字符串形式. 网上有两种解析JSON对象的jar包:JSON-lib. ...
- 【js jQuery】map集合 循环迭代取值---以及 map、json对象、list、array循环迭代的方法和区别
后台给前台传来一个map @ResponseBody @RequestMapping(value = "getSys") public Map<Long,String> ...
- Python实现Json结构对比的小工具兼谈编程求解问题
摘要: 通过使用Python编写一个解析Json结构对比的小工具,来提炼编程求解的通用步骤和技巧. 难度: 初级 先上代码. jsondiff.py #!/usr/bin/python #_*_enc ...
- 合并JSON对象的正确方式
一. 前言 “JSON对象合并”是前端开发和 NodeJS 环境开发中非常常见的操作.开发者通常会通过循环遍历或一些库封装的方法或 JavaScript ECMAScript 2015 定义的 Obj ...
- artTemplate--使用artTemplate时,由于json对象属性有数字命名格式 导致调用报错 syntax error
案例 今天在使用artTemplate做开发时,遇到一个比较奇葩的问题,就是使用json对象去获取值得时候,报如下错误: Template Error <temp> function an ...
随机推荐
- 翻译:《实用的Python编程》06_03_Producers_consumers
目录 | 上一节 (6.2 自定义迭代) | 下一节 (6.4 生成器表达式) 6.3 生产者,消费者和管道 生成器在设置各种生产者/消费者问题(producer/consumer problems) ...
- net core 中间件和管道
1.中间件 是处理请求和响应的组件(代码段,一段处理逻辑),这个处理逻辑是以"前一个请求处理逻辑"为输入,并经过中间件自己的处理后,返回一个"新的请求处理逻辑" ...
- istio in kubernetes (二) -- 部署篇
在 Kubernetes 部署 Istio [demo演示] 可参考官方文档(https://istio.io/latest/zh/docs/setup/install/) ,以部署1.7.4版本作为 ...
- 常见SQL命令总结学习 -- <1>
SQL学习网练习记录 参考1:http://sample.jimstone.com.cn/xsql/Course/4.html 参考2:http://sample.jimstone.com.cn/xs ...
- [Fundamental of Power Electronics]-PART II-7.交流等效电路建模-7.1 引言
7.1 引言 变换器系统总是需要反馈的.例如,在典型的DC-DC变换器应用中,无论输入电压\(V_{g}(t)\)和输出有效负载\(R\)如何变化,都必须使输出电压\(v(t)\)保持恒定.这是通过构 ...
- 网络编程Netty入门:ByteBuf分析
目录 Netty中的ByteBuf优势 NIO使用的ByteBuffer有哪些缺点 ByteBuf的优势和做了哪些增强 ByteBuf操作示例 ByteBuf操作 简单的Demo示例 堆内和堆外内存 ...
- 华为应用市场AppGallery Connect正式推出全新LOGO
华为应用市场AppGallery Connect(简称AGC)正式推出全新Logo,新Logo的设计灵感源于编码中的符号<>,两个括号紧密联结成一个正方形,寓意华为应用市场AGC与开发者深 ...
- HACK TEH BOX - Under Construction(JWT密钥混淆 + SQL注入)
HACK TEH BOX - Under Construction(JWT密钥混淆 + SQL注入) 目录 1. JWT密钥混淆 2. 环境 3. Challenge 4. Walkthrough 1 ...
- 老学长的TODOLIST
初期: 一.基本算法: (1)枚举(poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法 (4)递推 (5)构造法(poj3295)(这种 ...
- 1109 Group Photo (25分)
Formation is very important when taking a group photo. Given the rules of forming K rows with N peop ...