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



好吧,我们都知道有足够的java库来匹配json对象,例如gson和jackson。这些库可以做我需要的一切(比较嵌套、无序、"不完整"的对象(。但现在我尝试使用占位符来表示我知道类型但不知道确切值的值。我正在寻找一个现成的equalsWithTypePlaceholders(JSONObject对象1,JSONObject物体2(方法。当然,你可以自己做这件事,我个人会阅读对象,挑选带有占位符的键,检查它们是否匹配正确的类型,然后从json中删除这些键值对,并使用任何库中的equals((方法。

假设我已经准备好了这个模式(对象1(

[
{
"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"
}
]

我认为您在这里混合了定义。你的最后任务不是检查";"相等";,而是与模式相匹配。因此,您应该研究json模式以及如何根据它进行验证

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

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