当前位置: 首页 > 知识库问答 >
问题:

如何在java中比较两个JSON响应,而不考虑JSON数组序列?

赵超
2023-03-14

根据业务需要,我必须比较API URL的JSON响应,假设这是一个通用解决方案。JSON比较需要包括值不匹配以及模式不匹配。

根据要求,应为通用解决方案。我无法根据响应创建java对象并进行比较,因为响应JSON可以是具有任何模式的任何东西,因此JSON到对象的约定是不可能的,因为对象结构不能预先定义,并且会随每组API而变化。

我尝试的:尝试实施

方法1)flipkart孵化器/zjsonpatch:这是用Java(github.com)编写的RFC 6902 JSON补丁的实现

方法2)https://github.com/wnameless/json-flattener

但这个实现的问题是

但主要问题是,所有这些都在进行个案匹配,并能够在响应中按顺序处理不匹配。假设两个API的API响应如下,我想对其进行比较…。

API 1的响应

{
"name": "name1",
"address": "",
"skillset": [
  {
    "lang": "java",
    "projectName": "project1"
  },
  {
    "lang": "c++",
    "projectName": "project2"
  }

]
}

API 2的响应:

{
"name": "name1",
"address": "",
"skillset": [
  
  {
    "lang": "c++",
    "projectName": "project2"
  },
  {
    "lang": "java",
    "projectName": "project1"
  }

]
}

在这两个JSON响应中,数组元素是相同的,但它们不匹配skillset数组中的索引。对于名称“name1”,我的要求是这样的,因为skillset是相同的(只是响应顺序不同),我必须将其视为JSON响应中的“不匹配”。

但是上述两种实现在JSON响应和技能集数组中表现为不匹配,两者响应的顺序不同。

可能这可以通过json到java的对象转换轻松完成,然后进行对象比较。但由于这是一个通用解决方案,而且JSON响应模式事先未知,因此不可能创建任何对象结构。

任何人都可以建议任何可以实现这一点的方法、工具或过程?主要是我需要做一个json比较,而不管JSON数组序列如何。

共有1个答案

仇承志
2023-03-14

我找到了和你要求的相似的东西不是100%确定但也许这个能帮上忙

假设您使用的是Jackson,则需要地图绘制器来读取树

你可以拥有


ObjectMapper mapper=new ObjectMapper();
JsonNode object1=mapper.readTree(response1):
JsonNode object2=mapper.readTree(response2);


assertEquals(object1, object2);

即使顺序不一样,它也应该为您提供true。

单击此处了解更多信息

 类似资料:
  • 根据业务需要,我必须比较API URL的JSON响应,假设这是一个通用解决方案。JSON比较需要包括值不匹配以及模式不匹配。 按照要求是一个通用的解决方案。我无法根据响应创建java对象并将其进行比较,因为响应JSON可以是任何模式的任何东西,因此JSON到对象约定是不可能的,因为对象结构无法事先定义,并且会随着每组API而变化。 我尝试的:尝试实施 方法1)flipkart孵化器/zjsonpa

  • 问题内容: 我有这个间隔,当前每5秒执行一次ajax请求。我对声明有疑问。我的代码总是输入它,并且两个json值完全相同,为什么它认为它们不同? 编辑 这是控制台输出(虚线是分隔请求,它不在实际输出中) 问题答案: 不能保证以相同的方式序列化JSON对象,也不能保证属性以相同的顺序进行序列化,使用并不是测试对象相等性的好方法。 一个更好的例子是这样的函数(前一段时间在互联网上找到,希望我能感谢原始

  • 问题内容: 短篇小说:如何比较两个JSON块?下面的代码错误。 长话短说:我正在做一些E2E测试,其中一部分我需要将请求的JSON正文与接收到的JSON进行比较。为此,我尝试将期望的接收到的json解组到一个空接口(以避免任何类型错误),但出现错误: 。我猜编码/ json不喜欢空接口,所以问题是如何比较两个JSON块?字符串比较容易出错,因此我尝试避免这种情况。 问题答案: 您需要将指针传递给和

  • 问题内容: 我有两个像这样的对象数组: 我想知道数组是否相等。我定义的是相等的,因为array1中的每个值都与array2中该位置的值相同。因此,这两个数组将相等。 为什么最好找出这两个数组是否相等? 不是一个很深的等式,所以它是行不通的,我不知道是否遍历每个元素并进行比较是解决此问题的最佳,最有效的方法。有没有人有更好的建议? 编辑:我需要一个可以放入嵌套数组的等于。 问题答案: 使用。这项功能

  • 使用RestAssured,我试图比较两个JSON对象。 示例:第一个JSON来自excel,我将其作为字符串读取并存储 第二个 JSON 是返回响应对象的响应,该响应对象实际上是一个 JSON 我想将这两者作为JSON对象进行比较,因为当我将响应转换为String并尝试进行比较时,如果JSON模式的顺序发生变化,我的断言就会失败。 我尝试了将字符串转换成JSON的方法,但是没有找到任何方法。有人

  • 我正在尝试比较数组的两个连续数字,并在每次迭代中打印最大的数字。我已经写了下面的代码,但它给出了意想不到的回应。有人可以检查并帮助我理解错误吗? PS:我刚开始学习java。