Groovy - 比较两个JSON对象(相同的结构)并返回包含差异的ArrayList

时间:2015-06-02 15:43:20

标签: json groovy compare

我有两个结构相同的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:空:第二

1 个答案:

答案 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