【问题标题】:Check if two JSON Objects are equal, but with type placeholders for values检查两个 JSON 对象是否相等,但值的类型占位符
【发布时间】:2020-11-12 11:04:14
【问题描述】:

好的,我们都知道有足够多的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) 应返回 true,因为现有值匹配并且占位符已替换为正确的类型

[

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

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

[

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

【问题讨论】:

标签: java json jackson gson


【解决方案1】:

我认为您在这里混淆了定义。 您的最终任务不是检查“平等”,而是匹配模式。 所以你应该看看json-schemahow to validate against it

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 2016-06-27
    相关资源
    最近更新 更多