Groovy 比较两个具有未知节点名称和值的 json
Groovy compare two json with unknown nodes names and values
我要休息 API 来测试,我必须比较两个 json 响应。您可以在下面找到该文件的结构。要比较的两个文件应包含相同的元素,但顺序可能不同。不幸的是,名称、类型(简单、数组)和键的数量(root、nodeXYZ)也是未知的。
{"root": [{
"node1": "value1",
"node2": "value1",
"node3": [
{
"node311": "value311",
"node312": "value312"
},
{
"node321": "value321",
"node322": "value322"
}
],
"node4": [
{
"node411": "value411",
"node412": "value413",
"node413": [ {
"node4131": "value4131",
"node4132": "value4131"
}],
"node414": []
}
{
"node421": "value421",
"node422": "value422",
"node423": [ {
"node4231": "value4231",
"node4232": "value4231"
}],
"node424": []
}]
"node5": [
{"node51": "value51"},
{"node52": "value52"},
]
}]}
我在中找到了一些有用的信息
Getting node from Json Response
Groovy : how do i search json with key's value and find its children in groovy
但我无法将它组合成一个解决方案。
我认为解决方案可能如下所示:
take root
get root children names
check if child has children and get their names
do it to the lowest leve child
有了所有的名字,比较应该很容易(我猜)
不幸的是我没能在 root
下获得密钥
只是比较一下地图:
def map1 = new JsonSlurper().parseText(document1)
def map2 = new JsonSlurper().parseText(document2)
assert map1 == map2
试试 JSONassert 库:https://github.com/skyscreamer/JSONassert。然后你可以使用:
JSONAssert.assertEquals(expectedJson, actualJson, JSONCompareMode.STRICT)
您将获得格式良好的增量,例如:
java.lang.AssertionError: Resources.DbRdsLiferayInstance.Properties.KmsKeyId
Expected: kms-key-2
got: kms-key
我要休息 API 来测试,我必须比较两个 json 响应。您可以在下面找到该文件的结构。要比较的两个文件应包含相同的元素,但顺序可能不同。不幸的是,名称、类型(简单、数组)和键的数量(root、nodeXYZ)也是未知的。
{"root": [{
"node1": "value1",
"node2": "value1",
"node3": [
{
"node311": "value311",
"node312": "value312"
},
{
"node321": "value321",
"node322": "value322"
}
],
"node4": [
{
"node411": "value411",
"node412": "value413",
"node413": [ {
"node4131": "value4131",
"node4132": "value4131"
}],
"node414": []
}
{
"node421": "value421",
"node422": "value422",
"node423": [ {
"node4231": "value4231",
"node4232": "value4231"
}],
"node424": []
}]
"node5": [
{"node51": "value51"},
{"node52": "value52"},
]
}]}
我在中找到了一些有用的信息
take root
get root children names
check if child has children and get their names
do it to the lowest leve child
有了所有的名字,比较应该很容易(我猜) 不幸的是我没能在 root
下获得密钥只是比较一下地图:
def map1 = new JsonSlurper().parseText(document1)
def map2 = new JsonSlurper().parseText(document2)
assert map1 == map2
试试 JSONassert 库:https://github.com/skyscreamer/JSONassert。然后你可以使用:
JSONAssert.assertEquals(expectedJson, actualJson, JSONCompareMode.STRICT)
您将获得格式良好的增量,例如:
java.lang.AssertionError: Resources.DbRdsLiferayInstance.Properties.KmsKeyId
Expected: kms-key-2
got: kms-key