【问题标题】:Compare two json structure and get mismatch changes比较两个 json 结构并得到不匹配的变化
【发布时间】:2019-02-03 05:49:43
【问题描述】:

您好,我有如下的 json 结构 #1 和 #2。我想比较和捕捉结果。

Json #1。

{
    "menu": {
        "id": "file",
        "popup": {
            "menuitem": {
                "menuitem-1": "sometext",
                "menuitem-2": {
                    "menuitem-2.1": "sometext",
                    "menuitem-2.2": "sometext",
                    "menuitem-2.3": {
                        "menuitem-2.3.1": "sometext"
                    }
                }
            }
        },
        "value": "File"
    }
}

Json #2

{
    "menu": {
        "id": "file",
        "popup": {
            "menuitem": {
                "menuitem-2.3": {
                    "menuitem-2.3.1": "sometext"
                }
                "menuitem-1": "sometext",
                "menuitem-2": {
                    "menuitem-2.1": "sometext",
                    "menuitem-2.2": "sometext"
                },
            }
        },
        "value": "File"
    }
}

我期望 JSON #2 中的 JSON 以下已被上移。我的目标是识别 JSON#2 上的任何 CREATE NEW / UPDATE / ADJUSTED / DELETE。

"menuitem-2.3": {
   "menuitem-2.3.1": "sometext"
}

是否有任何现有的 Spring / Java 框架可以实现上述?

【问题讨论】:

  • 是否可以通过 Jackson 创建一个 java POJO,然后只比较 2 个类?
  • @dehasi 是的
  • 你看过stackoverflow.com/questions/2253750/… 可能会解决你的问题。
  • 我过去曾使用code.google.com/archive/p/java-diff-utils 来查找 XML 树中节点的最小 INSERT/DELETE/MOVE 集(类似于 JSON)。简单的方法可能是比较 JSON 的格式化文本输出。真正的“最小差异”并不像在树上听起来那么容易,当然也不像在列表(或文本行)上那么容易。
  • UPDATE 和 AJUSTED 有什么区别?

标签: java json spring-boot


【解决方案1】:

使用与 org.apache.commons.lang.StringUtils 的区别。 比较两个字符串,并返回它们不同的部分。 (更准确地说,返回第二个字符串的其余部分,从它与第一个不同的地方开始。)

例如,

difference("i am a machine", "i am a robot") -> "robot".
StringUtils.difference(null, null) = null
StringUtils.difference("", "") = ""
StringUtils.difference("", "abc") = "abc"
StringUtils.difference("abc", "") = ""
StringUtils.difference("abc", "abc") = ""
StringUtils.difference("ab", "abxyz") = "xyz"
StringUtils.difference("abcde", "abxyz") = "xyz"
StringUtils.difference("abcde", "xyz") = "xyz"

参数: str1 - 第一个字符串,可能为空 str2 - 第二个字符串,可能为空

【讨论】:

    【解决方案2】:

    尝试使用 Apache Drill。它易于安装并支持查询 JSON。然后,您可以执行减号查询并获得差异。

    您还可以使用 java 查询钻取。 Apache Drill 有一个 JDBC 驱动程序。

    希望对您有所帮助。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      • 1970-01-01
      相关资源
      最近更新 更多