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

如何在JSON数组序列中比较java中的两个JOSN响应

富勇军
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

是的,这是可以做到的。假设你在使用Jackson,你需要你的映射器来读取树

你可以有


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


assertEquals(object1, object2);

即使顺序不一样,它应该给你真实。

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

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

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

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

  • 问题内容: 我正在尝试编写代码以比较两个数组。在第一个数组中,我输入了自己的数字,但是在第二个数组中,输入了输入文件中的数字。该数组的大小由文件中的第一个数字确定,而第一个数组的大小始终为10。两个数组以及数字的长度必须相同。 我的代码如下: 问题答案: