求助:使用Groovy脚本将嵌套JSON转换为指定格式CSV
Groovy JSON转CSV问题解决指导
需求说明
需要将嵌套结构的JSON转换为扁平化的CSV格式:
输入JSON
[{ "id":1, "campaign": { "cost":0, "name":"Test1" }, "visitorId":3 }, { "id":2, "campaign": { "cost":0, "name":"Test2" }, "visitorId":5 }]
期望输出CSV
id,cost,name,visitorID 1,0,Test1,3 2,0,Test2,5
原脚本问题分析
你提供的脚本直接通过it.collect{ it.value }提取顶层字段值,但campaign是嵌套的Map对象,会被直接转为字符串(如[cost:0, name:Test1]),无法拆解出cost和name字段,导致输出格式不符合预期。
修正后的脚本
def jsonSlurper = new groovy.json.JsonSlurper() def object = jsonSlurper.parseText(message.getBody(java.lang.String) as String) StringBuilder sb = new StringBuilder() // 写入CSV表头 sb << "id,cost,name,visitorID\n" // 遍历每个数据项,提取扁平化字段 object.each { item -> def line = [ item.id, item.campaign.cost, item.campaign.name, item.visitorId ].join(",") sb << line << "\n" } // 移除最后多余的换行符,设置结果 message.setBody(sb.toString().trim())
脚本说明
- 先手动写入符合需求的CSV表头,确保字段顺序正确
- 遍历每个JSON对象时,明确提取顶层的
id、visitorId,以及嵌套在campaign里的cost和name字段 - 将提取的字段用逗号拼接成一行,添加到结果中
- 最后用
trim()移除末尾多余的换行,避免CSV出现空行
内容的提问来源于stack exchange,提问作者sabyasachi
相关产品推荐
相关产品推荐

