1

您好我正在尝试在 groovy 中创建一个 json 对象列表

List relClinicStatementList = []
            for (BloodTestRow row in BTList){
                def jsonListBuilder = new groovy.json.JsonBuilder()
                def internalJson = jsonListBuilder{
                        'targetRelationshipToSource' {
                            'code' 'part-of'
                            'codeSystem' 'MG'
                        }
                        'observationResult'{
                            'observationFocus'{
                                'code' "${row.exam}"
                                'codeSystem' 'mobiguide'
                                'displayName' "${row.exam}"
                            }
                            'observationValue' {
                                'physicalQuantity' {
                                    'value' "${row.value}"
                                    'unit' "${row.unit}"
                                    }
                            }
                        }
                    }
                println jsonListBuilder.toPrettyString()
                relClinicStatementList.add(internalJson)

            }

并且 toPrettyString() 方法正确显示了我想要的 json 结构。但是,如果在循环结束时我尝试打印列表中的所有项目,如下所示:

                    for (JsonBuilder entry in relClinicStatementList){
                    println entry.toPrettyString()
                    }

我让我的 relClinicalStatement 列表中的所有元素都等于我创建的最新元素......我觉得在每个循环中声明一个新的 JsonBuilder 会阻止这种行为......我错过了什么吗?我必须承认我来自 Java,并且感觉在这里使用 groovy 类会使它的行为与我所期望的有点不同。我该如何解决这个问题?

提前致谢

4

1 回答 1

1

我无法重现您所看到的行为,但我认为问题在于我不相信internalJson您认为它是什么(它是 2 个闭包的列表)。

如果您将代码更改为:

List relClinicStatementList = btList.collect { row ->
    new groovy.json.JsonBuilder( {
        targetRelationshipToSource {
            code       'part-of'
            codeSystem 'MG'
        }
        observationResult {
            observationFocus {
                code        "$row.exam"
                codeSystem  'mobiguide'
                displayName "$row.exam"
            }
            observationValue {
                physicalQuantity {
                    value "$row.value"
                    unit  "$row.unit"
                }
            }
        }
    } )
}

relClinicStatementList.each { entry ->
    println entry.toPrettyString()
}

它是否按您的预期工作?

于 2014-02-25T15:49:28.487 回答