Groovy解析JSON如何获取全量数据及指定team role id的amount值
问题根因
现有代码存在两个核心错误导致无法拿到目标数据:
- HTTP请求为异步执行,你将JSON解析、取值逻辑写在了
response.success回调外部,回调函数还未执行完成、未给arrayDen赋值时,外部的解析代码就已经运行,最终拿到的是历史缓存的单条默认费率数据 - 存在冗余的错误转换逻辑:Groovy HTTP客户端默认已经将响应JSON解析为可直接操作的List/Map结构传入回调的
json参数,额外做JsonOutput.toJson转字符串、substring截取首尾、JsonSlurper重复解析的操作,反而会破坏原JSON的数组结构,引发解析异常
修复后完整代码
http.request(Method.GET) { response.success = { resp, json -> // 直接在回调内操作已解析完成的json数组,无需额外格式转换 def targetRecord = json.find { item -> // 匹配link类型为TEAM_ROLE、关联id为4的条目 item.link?.type == "TEAM_ROLE" && item.link?.id == 4 } def targetAmount = targetRecord?.amount // 此处写后续业务逻辑,示例打印结果 log.warn("目标费率值:{}", targetAmount) // 对应示例JSON输出为1000.0 } }
关键调整说明
- 移除所有冗余的JSON转字符串、字符串截取、重复解析逻辑,直接使用回调传入的已解析
json对象操作 - 所有数据处理逻辑全部移入
response.success回调内部,保证请求成功拿到完整响应后再执行解析取值 - 用Groovy内置的集合
find方法匹配目标条目,通过安全导航符?.规避字段为空时的空指针异常,直接获取对应amount值
内容的提问来源于stack exchange,提问作者Gökberk Karaca
相关产品推荐
相关产品推荐

