使用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 ...
随机推荐
- IgniteMe -高校网络信息安全运维挑战赛
1 int __cdecl main(int argc, const char **argv, const char **envp) 2 { 3 void *v3; // eax 4 int v4; ...
- redis雪崩,穿透,击穿
缓存雪崩:同一时间大量key到过期时间失效,可在设置失效时间时加随机数,如果直接修改数据库,那么一定会有不一致,通过失效时间去反复刷新缩短不一致的时间, 为了避免数据一直存在,一定要设置过期时间如果通 ...
- (三)SpringBoot启动过程的分析-创建应用程序上下文
-- 以下内容均基于2.1.8.RELEASE版本 紧接着上一篇(二)SpringBoot启动过程的分析-环境信息准备,本文将分析环境准备完毕之后的下一步操作:ApplicationContext的创 ...
- Ubuntu18.04安装MySQL(未设置密码或忘记密码)
一 安装MySQL sudo apt-get update sudo apt-get install mysql-server 二 密码问题 1 安装时提示设置密码 这种情况没什么问题,通过已下命令登 ...
- Git 在解决冲突的时候文件覆盖
更新代码导致被还原或覆盖的场景:1.触发冲突的必要条件是修改同一个文件且修改的位置非常近,否则Git会自动合并其内容避免更新代码导致被还原或覆盖的解决方案1.少修改的地方(生产环境.公网测试环境):推 ...
- 庐山真面目之十二微服务架构基于Docker搭建Consul集群、Ocelot网关集群和IdentityServer版本实现
庐山真面目之十二微服务架构基于Docker搭建Consul集群.Ocelot网关集群和IdentityServer版本实现 一.简介 在第七篇文章<庐山真面目之七微服务架构Consul ...
- 分享一次排查CLOSE_WAIT过多的经验
关键词:TCP.CLOSE_WAIT 问题背景 某日下午有测试人员急匆匆的跑来跟我反馈:"有客户反馈供应商附件预览不了,流程阻塞,需要紧急处理",我立马精神起来,毕竟都是付费客户( ...
- JS定时器使用,定时定点,固定时刻,循环执行
JS定时器使用,定时定点,固定时刻,循环执行 本文概述:本文主要介绍通过JS实现定时定点执行,在某一个固定时刻执行某个函数的方法.比如说在下一个整点执行,在每一个整点执行,每隔10分钟定时执行的方法. ...
- Elasticsearch扩展X-pack实施流程-实施
Elasticsearch扩展X-PACK实施流程 elasticsearch5.2.1安装X-PACK,对ES集群进行监控,报警,安全验证,报告,图形化操作 注意 版本号需要固定,小版本都不能差,要 ...
- Dynamics CRM绑定表单查看当前表单的数据参数传递
我们做报表的时候,报表运行的位置可以在列表.也可以在报表区同时也可以在表单界面 其他两个都还好,不需要进行过滤,但是在表单界面运行报表需要将表单的GUID传给报表获取数据,否则就得手动去输入ID 具体 ...