如何在groovy中修改JSON

如何在groovy中修改JSON,json,groovy,jsonbuilder,Json,Groovy,Jsonbuilder,我使用JsonBuilder构建JSONObject/String 但是,如何更新/更改此JSONObject/字符串中一个字段的值 我看不到使用JsonBuilder实现这一点的可能性。那么我使用什么显示?如果您必须更改已经放入JsonBuilder的内容,那么您可以执行以下操作: import groovy.json.* def map = [ users:[ [ name:'tim', posts:43 ], [ name:'alice', posts:72 ] ] ] JsonBui

我使用JsonBuilder构建JSONObject/String

但是,如何更新/更改此JSONObject/字符串中一个字段的值

我看不到使用JsonBuilder实现这一点的可能性。那么我使用什么显示?

如果您必须更改已经放入JsonBuilder的内容,那么您可以执行以下操作:

import groovy.json.*

def map = [ users:[ [ name:'tim', posts:43 ], [ name:'alice', posts:72 ] ] ]

JsonBuilder builder = new JsonBuilder( map )

builder.content.users[ 0 ].name = 'dave'

assert builder.toString() == '{"users":[{"name":"dave","posts":43},{"name":"alice","posts":72}]}'
但是由于
内容
不是从对象显式导出的,因此我认为这是一种副作用,不会依赖它在Groovy的未来版本中工作


最好在将映射传递给
JsonBuilder
之前获得正确的映射,或者如果不可能,我猜您需要使用
JsonSlurper
解析Json字符串,修改生成的映射,然后再次使用
JsonBuilder
重建Json。这将只返回一个映射。你的意思是更新映射并转换回json吗?是的。JsonSlurper将json读入映射。更改它,并使用JSONBuilderies将修改后的映射写回json,这样就可以了。但是,我更喜欢直接更改JsonBuilder。JsonBuilder本身返回一个映射。但是,那张地图我只能得到一级属性。对于复杂属性,我无法获取该值。因此,您希望在不解析字符串的情况下更改编码为Json字符串的映射的属性吗?