检查两个 JSON 对象是否相等,但值的类型占位符

Check if two JSON Objects are equal, but with type placeholders for values

好的,我们都知道有足够的 java 个库来匹配 json 个对象,例如 gson 和 jackson。 这些库可以做我需要的一切(比较嵌套的、无序的、“不完整”的对象)。但现在我正在尝试将占位符用于我知道其类型但不知道确切值的值。我正在寻找一种随时可用的 equalsWithTypePlaceholders(JSONObject object1, JSONObject object2) 方法。当然你可以自己做,我个人会读取对象,挑选出带有占位符的键,检查它们是否匹配正确的类型,然后从 json 中删除这些键值对并使用 equals() 方法来自任何图书馆。

假设我已经准备好这个模式 (object1)

[

  {
    "list": [
      {
        "id": "{int}",
        "anotherlist": [
          {
            "name": "{string}",
            "value": "abc"
          }
        ],
        "key": "{alphanumeric-string}",
        "name": "{alphanumeric-string}"
      }
    ],
    "key1":"value2"
  }
]

以下输入 (object2) 应该 return 为真,因为现有值匹配并且占位符已替换为正确的类型

[

  {
    "list": [
      {
        "id": "123",
        "anotherlist": [
          {
            "name": "name",
            "value": "abc"
          }
        ],
        "key": "123asd",
        "name": "987asdas"
      }
    ],
    "key1":"value2"
  }
]

以下输入 (object2) 应该 return false,因为现有值不匹配并且 2 个占位符的类型错误

[

  {
    "list": [
      {
        "id": "hello",
        "anotherlist": [
          {
            "name": "123",
            "value": "abcde"
          }
        ],
        "key": "123asd",
        "name": "312qwe"
      }
    ],
    "key1":"value2"
  }
]

我认为您在这里混淆了定义。 您的最终任务不是检查“相等性”,而是匹配架构。 所以你应该看看 json-schema and how to validate against it

"properties": {
    "additionalProperties": false,
    "id": {
        "type": "int",
    },
    "name": {
       "const": "exact value"
    }",
    .....

我认为这将是您进一步研究的最佳方向。