首页 > 其他分享 >jsonunit 比较jsondiff

jsonunit 比较jsondiff

时间:2024-08-17 08:53:29浏览次数:11  
标签:jsonunit jsondiff when assertThatJson IGNORING json test ARRAY 比较

https://github.com/lukas-krecan/JsonUnit
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.json;

...

// compares two JSON documents (note lenient parsing of expected value)
assertThatJson("{\"a\":1, \"b\":2}").isEqualTo("{b:2, a:1}");

// objects are automatically serialized before comparison
assertThatJson(jsonObject).isEqualTo("{\n\"test\": 1\n}");

// AssertJ map assertions (numbers are converted to BigDecimals)
assertThatJson("{\"a\":1}").isObject().containsEntry("a", BigDecimal.valueOf(1));

// Type placeholders
assertThatJson("{\"a\":1, \"b\": {\"c\" :3}}").isObject().containsValue(json("{\"c\" :\"${json-unit.any-number}\"}"));

// AssertJ array assertion
assertThatJson("{\"a\":[{\"b\": 1}, {\"c\": 1}, {\"d\": 1}]}").node("a").isArray().contains(json("{\"c\": 1}"));

// Can ignore array order
assertThatJson("{\"a\":[{\"b\": 1}, {\"c\": 1}, {\"d\": 1}]}").when(Option.IGNORING_ARRAY_ORDER).node("a").isArray()
            .isEqualTo(json("[{\"c\": 1}, {\"b\": 1} ,{\"d\": 1}]"));

// custom matcher
assertThatJson("{\"test\":-1}")
            .withConfiguration(c -> c.withMatcher("positive", greaterThan(valueOf(0))))
            .isEqualTo("{\"test\": \"${json-unit.matches:positive}\"}");

// and
assertThatJson("{\"test\":{\"a\":1, \"b\":2, \"c\":3}}").and(
    a -> a.node("test.a").isEqualTo(1),
    a -> a.node("test.b").isEqualTo(2)
);
<dependency>
    <groupId>net.javacrumbs.json-unit</groupId>
    <artifactId>json-unit-assertj</artifactId>
    <version>2.7.0</version>
    <scope>test</scope>
</dependency>
比较时的可选项Options

Options

There are multiple options how you can configure the comparison

TREATING_NULL_AS_ABSENT - fields with null values are equivalent to absent fields. For example, this test passes

代码语言:javascript 复制
assertJsonEquals("{\"test\":{\"a\":1}}",
    "{\"test\":{\"a\":1, \"b\": null, \"c\": null}}",
    when(TREATING_NULL_AS_ABSENT));

IGNORING_ARRAY_ORDER - ignores order in arrays

代码语言:javascript 复制
assertJsonEquals("{\"test\":[1,2,3]}",
    "{\"test\":[3,2,1]}",
    when(IGNORING_ARRAY_ORDER));

IGNORING_EXTRA_ARRAY_ITEMS - ignores unexpected array items

代码语言:javascript 复制
assertJsonEquals("{\"test\":[1,2,3]}",
    "{\"test\":[1,2,3,4]}",
    when(IGNORING_EXTRA_ARRAY_ITEMS));

assertJsonEquals("{\"test\":[1,2,3]}",
    "{\"test\":[5,5,4,4,3,3,2,2,1,1]}",
    when(IGNORING_EXTRA_ARRAY_ITEMS, IGNORING_ARRAY_ORDER));

IGNORING_EXTRA_FIELDS - ignores extra fields in the compared value

代码语言:javascript 复制
assertThatJson("{\"test\":{\"a\":1, \"b\":2, \"c\":3}}")
    .when(IGNORING_EXTRA_FIELDS)
    .isEqualTo("{\"test\":{\"b\":2}}");

IGNORE_VALUES - ignores values and compares only types

代码语言:javascript 复制
assertJsonEquals("{\"test\":{\"a\":1,\"b\":2,\"c\":3}}",
    "{\"test\":{\"a\":3,\"b\":2,\"c\":1}}",
    when(IGNORING_VALUES));

It is possible to combine options.

代码语言:javascript 复制
assertJsonEquals("{\"test\":[{\"key\":1},{\"key\":2},{\"key\":3}]}",
    "{\"test\":[{\"key\":3},{\"key\":2, \"extraField\":2},{\"key\":1}]}",
    when(IGNORING_ARRAY_ORDER, IGNORING_EXTRA_FIELDS));

In Hamcrest assertion you can set the option like this

代码语言:javascript 复制
assertThat("{\"test\":{\"a\":1, \"b\":2, \"c\":3}}",
    jsonEquals("{\"test\":{\"b\":2}}").when(IGNORING_EXTRA_FIELDS));

json2xml

这个团队还开发了一个json转为xml的工具,还支持了array/attribute等较为复杂的内容 https://github.com/lukas-krecan/json2xml 由于好多金融系统间的协议使用到了XML,但是xml编写比较麻烦,这个功能还是有潜在的使用价值的

标签:jsonunit,jsondiff,when,assertThatJson,IGNORING,json,test,ARRAY,比较
From: https://www.cnblogs.com/lbzwd/p/18364026

相关文章

  • 挂淘宝挂店群用什么云服务器比较好
    一,铺店群的电商同行朋友的烦恼说起来,我也算是和几千个做电商的朋友打过交道了,他们有的是做淘宝店铺的,有的是做拼多多的,有的是做抖店的,有的是做京东的。总之各种各样的电商平台。电商平台都有一个通用的规则,那么就是在一个ip下,某个电商平台只允许挂一个品类的店铺一个,比如说淘宝......
  • python判断语句之if语句、比较和逻辑运算符、if...else...语句、if...elif...else语句
    文章目录1.介绍1.1顺序语句1.2判断语句1.3循环语句2.if语句的基本格式2.1判断语句介绍2.2程序中的判断2.3if语句的基本格式3.比较和逻辑运算符3.1比较运算符3.2逻辑运算符4.if...else...语句4.1if...else...的语法格式4.2实例5.if...elif...else...语......
  • 字符串比较的常用函数
    staticvoidMain(string[]arg){intint1=0;intint2=0;intint3=0;stringstr1="adf";stringstr2="adf";stringstr3="Adf";......
  • var let const 之间的比较
    var特点函数作用域:var声明的变量在函数内有效,如果在函数外声明,则为全局作用域。变量提升:var声明的变量会被提升到函数的顶部,初始化为undefined。即使在声明之前引用,JavaScript也不会抛出错误。可重复声明:在同一作用域内,可以多次声明同一个变量,不会引发错误。用法//在......
  • 比较好用的,偏免安装绿色版的工具软件
    作者:KaneCao链接:https://www.zhihu.com/question/356224162/answer/2577665684来源:知乎1.截图工具-Snipate/FSCapturesnipate官网:https://zh.snipaste.com/让Snipaste帮你提高工作效率;Snipaste是一个简单但强大的截图工具,也可以让你将截图贴回到屏幕上!下载并打开Snipaste......
  • mysql数据库中decimal数据类型比较大小
    在MySQL中,DECIMAL数据类型用于存储精确的数值,它非常适合用于需要高精度计算的场景,如金融应用。当我们需要在MySQL数据库中比较DECIMAL类型数据的大小时,可以使用标准的比较运算符,如>,<,>=,<=,=和<>(或!=)。以下是一个详细的示例,说明如何在MySQL中使用DECIMAL数据类型并比较......
  • mysql数据库中decimal数据类型比较大小
    在MySQL中,DECIMAL数据类型用于存储精确的数值,它非常适合用于需要高精度计算的场景,如金融应用。当我们需要在MySQL数据库中比较DECIMAL类型数据的大小时,可以使用标准的比较运算符,如>,<,>=,<=,=和<>(或!=)。以下是一个详细的示例,说明如何在MySQL中使用DECIMAL数据类型并比较它......
  • 二年级语文怎么辅导比较有效以及提高成绩
    **1⃣重视细节。**握笔姿势、写字姿势、坐姿、朗读习惯、课前准备、听课发言这些小习惯看似微小,却能帮助孩子在最开始打好基础,端正态度,提高学习效率,也省去了以后纠正的麻烦。**2⃣预习。**预习是学生自主学习的开始,语文需要养成预习的习惯,读-圈-划-写。等上课的时候就能带着......
  • 专题(二)比较
    -eq相等(equal)-ne不等(notequal)-gt大于(greaterthan)-lt小于(lessthan)-ge大于等于(greaterthanorequal)-le小于等于(lessthanorequal)1、字符串比较[ $str1 = $str2 ]等于[ $str1 != $str2 ]不等于[-z $str ]空字符串返回true[-n $str ]或者[ $str......
  • JAVA--比较器
    Java中的比较器(Comparator)是一个非常强大的特性,它允许我们定义对象比较的规则。在Java中,Comparator接口位于java.util包中,主要用于对象的比较。以下是对Java中比较器的详细介绍。1.比较器的基本概念在Java中,比较器(Comparator)是一个接口,它定义了两个参数的比较方法。通过实现......