检查两个 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"
}",
.....
我认为这将是您进一步研究的最佳方向。
好的,我们都知道有足够的 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"
}",
.....
我认为这将是您进一步研究的最佳方向。