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

pbwdgjma  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(238)

好的,我们都知道有足够的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"
  }
]
t0ybt7op

t0ybt7op1#

我认为您在这里混淆了定义。您的最终任务不是检查“是否相等”,而是与模式进行匹配。因此您应该查看json-schemahow to validate against it

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

我想这将是你进一步研究的最好方向。

相关问题