Groovy Builder构建JSON时插入JSONArray失败问题求助
问题解决:Groovy JsonBuilder 插入数组错误修正
错误原因分析
你的代码存在两个核心问题:
- 重复使用同一个
JsonBuilder实例,第二次调用builder {}会覆盖之前的结构,导致json2的内容被破坏。 - 直接插入
json2对象会把整个包含subscribedCountries键的Map嵌套进去,而非你需要的数组本身。
修正方案一(最简洁写法)
直接用Groovy原生List构建subscribedCountries数组,再嵌套进整个JSON结构:
import groovy.json.JsonBuilder; // 先构建订阅国家的列表(无需额外JsonBuilder) def subscribedCountries = [] for(int i=2;i<=20;i++){ subscribedCountries.add([ currencyId: vars.get('currencyId_'+i), countryId: vars.get('countryId_'+i), status:'Active' ]) } // 构建完整的JSON Payload def builder = new JsonBuilder() builder { subscriptions([ [ subscriptionsId: '1243232', subscriptionName: 'Employee', subscribedCountries: subscribedCountries ] ]) } // 打印格式化后的JSON println builder.toPrettyString()
修正方案二(保留分步骤构建)
如果需要分步骤用JsonBuilder构建,需使用独立的Builder实例,并提取数组内容插入:
import groovy.json.JsonBuilder; // 用独立Builder构建订阅国家数组 def countryBuilder = new JsonBuilder() def countryJson = countryBuilder { subscribedCountries [] } for(int i=2;i<=20;i++){ countryJson.subscribedCountries.add([ currencyId: vars.get('currencyId_'+i), countryId: vars.get('countryId_'+i), status:'Active' ]) } // 用另一个Builder构建主结构 def mainBuilder = new JsonBuilder() def mainJson = mainBuilder { subscriptions([ [ subscriptionsId: '1243232', subscriptionName: 'Employee', subscribedCountries: countryJson.subscribedCountries ] ]) } println mainBuilder.toPrettyString()
关键注意事项
- 每个独立的JSON结构要使用单独的
JsonBuilder实例,避免内容覆盖。 - 插入数组时直接传入Groovy List对象,而非包含数组的JSON结构对象。
- JsonBuilder会自动将Groovy的List/Map转换为对应的JSON数组/对象。
内容的提问来源于stack exchange,提问作者Mandy
相关产品推荐
相关产品推荐

