你好,我正试图在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类会使它的行为与我预期的有所不同。我该如何解决此问题?
提前感谢
我无法重现您所看到的行为,但我认为问题是我不相信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()
}
它能像你预期的那样工作吗?