Groovy - 比较两个 JSON 对象(相同结构)和包含差异的 return ArrayList
Groovy - compare two JSON objects (same structure) and return ArrayList containing differences
我有两个 JSON 结构相同的对象 - 一个原始对象和一个我想与之比较的对象。只有一层信息(即没有任何子信息)。
我想比较两者并记住哪些字段(如果有)不同,方法是将键存储在 secondDifferingFields ArrayList 中。
def secondDifferingFields = new ArrayList()
orignialJSON.each {
print "original:"+it.value+":VS:"+secondJSON.it+":second"
if (it.value != secondJSON.it){
secondDifferingFields.add(it)
}
}
我可以看到我正在遍历原始值JSON,但不确定如何在第二个JSON中访问相同键的值(如果这是正确的措辞)以便能够比较它们。我总是看到打印行
原始:XYZ:VS:空:秒
您总是与 secondJSON.it
进行比较(这里的 it
只是一个字符串键,由于此键没有值,因此您得到 null
)。
您将不得不使用:
secondJSON.get(it.key)
// or secondJSON."$it.key"
从其他地图访问密钥。请注意,如果地图中有有效的 null
值,您可能需要检查 containsKey
是否确实存在条目。
在 groovy 中的地图上使用不存在的属性只会尝试在地图中查找该字符串键。
assert [:].it==null // key `String it` does not exist
assert [:].SevenDrunkenNights==null // same here
assert [it:1].it==1 // now it does
assert [:].get('it')==null // same same for `get`
assert [it:1].get('it')==1
我有两个 JSON 结构相同的对象 - 一个原始对象和一个我想与之比较的对象。只有一层信息(即没有任何子信息)。
我想比较两者并记住哪些字段(如果有)不同,方法是将键存储在 secondDifferingFields ArrayList 中。
def secondDifferingFields = new ArrayList()
orignialJSON.each {
print "original:"+it.value+":VS:"+secondJSON.it+":second"
if (it.value != secondJSON.it){
secondDifferingFields.add(it)
}
}
我可以看到我正在遍历原始值JSON,但不确定如何在第二个JSON中访问相同键的值(如果这是正确的措辞)以便能够比较它们。我总是看到打印行
原始:XYZ:VS:空:秒
您总是与 secondJSON.it
进行比较(这里的 it
只是一个字符串键,由于此键没有值,因此您得到 null
)。
您将不得不使用:
secondJSON.get(it.key)
// or secondJSON."$it.key"
从其他地图访问密钥。请注意,如果地图中有有效的 null
值,您可能需要检查 containsKey
是否确实存在条目。
在 groovy 中的地图上使用不存在的属性只会尝试在地图中查找该字符串键。
assert [:].it==null // key `String it` does not exist
assert [:].SevenDrunkenNights==null // same here
assert [it:1].it==1 // now it does
assert [:].get('it')==null // same same for `get`
assert [it:1].get('it')==1