Groovy中如何遍历JSON数组并读取每个元素的值
修正Groovy代码实现JSON数组循环读取并输出指定格式
原代码问题点
- 变量名不匹配:定义了
sourceValue_Number却使用未声明的sourceValue_SerialNumber,且record.text()是错误的取值方式,应从遍历的element中获取SNumber - 仅创建
JsonBuilder但未处理生成的JSON结果,也未修改返回的消息内容 - 未将处理后的结果更新到返回消息中
修正后的代码
import groovy.json.JsonBuilder import groovy.json.JsonSlurper def Message processData(Message message) { // 解析输入的JSON内容 def jsonReader = message.getBody(java.io.Reader) def data = new JsonSlurper().parse(jsonReader) // 收集每个格式化后的JSON字符串 def serialNumberResults = [] data.SerialNumbers.each { element -> // 获取当前元素的SNumber值 def targetNumber = element.SNumber // 构建预期格式的JSON对象 def jsonBuilder = new JsonBuilder() jsonBuilder { SNumber targetNumber } // 将格式化后的JSON字符串加入结果列表 serialNumberResults.add(jsonBuilder.toPrettyString()) } // 拼接结果为预期的输出格式(每个JSON单独占一段) def outputContent = serialNumberResults.join('\n\n') // 更新消息体为处理后的结果 message.setBody(outputContent) return message }
代码说明
- JSON解析:通过
JsonSlurper正确读取并解析输入的JSON结构 - 数组遍历:使用
each循环遍历SerialNumbers数组中的每一项元素 - JSON构建:从每个元素中提取
SNumber值,用JsonBuilder生成符合要求的JSON对象 - 结果输出:将所有生成的JSON字符串拼接成预期格式,更新消息体后返回
执行后输出
消息体将返回如下内容:
{ "SNumber": "IR-240607000100" } { "SNumber": "IR-240607000101" }
内容的提问来源于stack exchange,提问作者Sateesh
相关产品推荐
相关产品推荐

