当前位置:   article > 正文

比较两个JSON的不同_比较两个json对象字段的差异

比较两个json对象字段的差异

本例子使用Jackson库来解析JSON字符串,并逐个比较JSON节点,包括对象、数组和值的差异。

主要功能包括:

  1. ObjectMapper对象,用于将JSON字符串转换为JsonNode对象。

  2. compareJson 方法接受两个JSON字符串,并将它们转换为JsonNode对象,然后调用 compareNodes 方法来逐个比较节点。

  3. compareNodes 方法是递归的,它会处理对象、数组和值的差异。如果两个节点相同,它会直接返回。如果节点是对象,它会比较它们的字段,如果一个字段在一个JSON中有而在另一个中没有,它会报告缺失字段。如果节点是数组,它会比较它们的元素,如果数组长度不同,它会报告长度不同。如果节点是值,它会比较它们的内容,如果不同,它会报告值不同。

compareNodes 方法用于测试两个JSON字符串是否相同,以及它们之间的差异。

示例代码:

	@Test
    void text() {
        String json1 = "{\"name\": \"小明\", \"age\": 30}";
        String json2 = "{\"name\": \"大红\", \"age\": 30}";

        try {
            compareJson(json1, json2);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
    public void compareJson(String json1, String json2) throws IOException {
          ObjectMapper objectMapper = new ObjectMapper();
          JsonNode tree1 = objectMapper.readTree(json1);
          JsonNode tree2 = objectMapper.readTree(json2);
  
          compareNodes(tree1, tree2);
      }

	private void compareNodes(JsonNode node1, JsonNode node2) {
      if (node1.equals(node2)) {
          return;
      }

      if (node1.isObject() && node2.isObject()) {
          node1.fieldNames().forEachRemaining(fieldName -> {
              if (!node2.has(fieldName)) {
                  System.out.println("字符串 '" + fieldName + "' 在第二个JSON中丢失.");
              } else {
                  JsonNode childNode1 = node1.get(fieldName);
                  JsonNode childNode2 = node2.get(fieldName);
                  compareNodes(childNode1, childNode2);
              }
          });

          node2.fieldNames().forEachRemaining(fieldName -> {
              if (!node1.has(fieldName)) {
                  System.out.println("字符串 '" + fieldName + "' 在第二个JSON中丢失.");
              }
          });
      } else if (node1.isArray() && node2.isArray()) {
          int size1 = node1.size();
          int size2 = node2.size();

          if (size1 != size2) {
              System.out.println("数组大小不匹配: " + size1 + " 在第一个JSON中 and " + size2 + " 在第二个JSON中.");
          }

          int minSize = Math.min(size1, size2);
          for (int i = 0; i < minSize; i++) {
              compareNodes(node1.get(i), node2.get(i));
          }
      } else {
          System.out.println("值不匹配: " + node1 + " 在第一个JSON中 and " + node2 + " 在第二个JSON中.");
      }
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号