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