我有两个结构相同的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)
}
}
我可以看到我正在迭代originalJSON的值,但我不确定如何在secondJSON中访问相同键的值(如果这是正确的措辞),以便能够比较它们。我总是看到打印线
原:XYZ:VS:空:第二
答案 0 :(得分:2)
您总是与secondJSON.it
进行比较(it
这里只是一个字符串键,由于此键没有值,因此您获得null
)。
你必须使用:
secondJSON.get(it.key)
// or secondJSON."$it.key"
从其他地图访问密钥。请注意,如果地图中包含有效的containsKey
值,您可能需要查看null
是否确实存在条目。
在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