当元素键不同但值相同时,我们如何比较两个 JSON 文件

How can we compare two JSON files when element keys are different but values are same

提问人:Raj 提问时间:7/29/2023 最后编辑:Ajeet VermaRaj 更新时间:7/30/2023 访问量:61

问:

我有两个来自两个 API 的 JSON 响应字符串

API1 响应:

{
  "data": [
    {
      "sets": [
        {
          "type": "adImg",
          "imgs": {
            "attributes": [
              {
                "name": "bottomPadding",
                "value": "true"
              }
            ],
            "img": {
              "links": [
                {
                  "linkType": "PRODUCT",
                  "label": "123",
                  "value": "1526783"
                }
              ]}}}]}]}

API2 响应:

{
  “values”: [
    {
      “contents”: [
        {
          "attributes": [
              {
                "attrName": "bottomPadding",
                "attrValue": "true"
              }
            ],
            "nested-Content": {
              "content": [
                {
                  “type”: "PRODUCT",
                  “id”: "123",
                  “val”: "1526783"
                }
              ]}}}]}]}

API1 响应中的键名称为:name、value、linkType、label、value

API2 响应中的键名称为:attrName、attrValue、type、id、val

但是,两个 API 响应中的元素值是相同的。

我们如何比较两个 API 响应以确认值相同?

比较 放心

评论


答:

1赞 lucas-nguyen-17 7/30/2023 #1

对于这种特定情况,我认为逐个部分提取然后比较是最短的方法(就编码线而言)。

List<Object> first = new ArrayList<>(JsonPath.from(json1).getMap("data[0].sets[0].imgs.attributes[0]").values());
List<Object> first2 = new ArrayList<>(JsonPath.from(json2).getMap("values[0].contents[0].attributes[0]").values());
assertThat(first).isEqualTo(first2);

List<Object> second = new ArrayList<>(JsonPath.from(json1).getMap("data[0].sets[0].imgs.img.links[0]").values());
List<Object> second2 = new ArrayList<>(JsonPath.from(json2).getMap("values[0].contents[0]['nested-Content'].content[0]").values());
assertThat(second).isEqualTo(second2);

如果您想以一般方式解决这个问题,选项是将 API 响应映射到 Java 对象,然后比较 2 个对象。

评论

0赞 Raj 7/31/2023
感谢您的回复!,是的,我只在寻找对象比较。您能否给我一个解决方案,为两个响应创建对象并进行比较?
0赞 lucas-nguyen-17 7/31/2023
这篇文章可能会帮助你 phauer.com/2016/testing-restful-services-java-best-practices/...我不想为这个复杂的响应编写 POJO 解决方案。这是不必要的。