How to modify JSON in groovy

user1947415 picture user1947415 · Nov 20, 2013 · Viewed 10.7k times · Source

I use JsonBuilder to build a JSONObject/String.

But, how can I update/change value of one field in this JSONObject/String?

I am not seeing the possibility of doing this using JsonBuilder. What show I use then?

Answer

tim_yates picture tim_yates · Nov 21, 2013

If you have to change the content you already put into the JsonBuilder, then you could do:

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}]}'

But as content is not explicitly exported from the Object, I'd call this a side-effect and would not rely on it working in future versions of Groovy.

Better to get your map right before you pass it to JsonBuilder, or if that isn't possible I guess you'll need to parse the Json string with JsonSlurper modify the resulting Map and then rebuild the Json with JsonBuilder again.