【问题标题】:Groovy - compare two JSON objects (same structure) and return ArrayList containing differencesGroovy - 比较两个 JSON 对象(相同结构)并返回包含差异的 ArrayList
【发布时间】:2015-06-02 15:43:20
【问题描述】:

我有两个结构相同的 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:null:秒

【问题讨论】:

    标签: json groovy compare


    【解决方案1】:

    您总是在与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
    

    【讨论】:

    • 我怎么没看到这个!?正是我所追求的 - 谢谢
    猜你喜欢
    • 2021-08-30
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 2023-03-26
    相关资源
    最近更新 更多