Groovy如何从JSON输出中提取指定的value字段值
解决方案:提取JSON数组中指定元素的value值
原代码存在的问题
sh命令未添加returnStdout: true参数,默认仅返回执行状态码,无法获取curl请求的输出内容- 接口返回的是JSON数组,直接访问
json.value会报错,需遍历数组筛选目标元素 json_pp是格式化输出工具,对readJSON解析无必要,反而可能引入额外格式干扰
修正后的完整代码
// 获取接口返回的JSON原始内容,添加returnStdout: true捕获输出 def VALUES_BEFORE = sh script: """ curl -X POST "http://node-01.xyz.com:32010/abc/def" \\ -H "accept: application/json" \\ -H "Content-Type: application/json" \\ -d '{ "cell_ids": [${payload}] }' """, returnStdout: true // 解析JSON为Groovy列表对象,trim()去除输出前后空白避免解析异常 def jsonList = readJSON text: VALUES_BEFORE.trim() // 筛选出def为"histro"的元素,提取对应的value值 def histroValue = jsonList.find { it.def == "histro" }?.value // 输出结果,增加空值判断避免报错 if (histroValue) { echo "histro对应的value值:${histroValue}" } else { echo "未找到def为histro的元素" }
关键代码说明
returnStdout: true:确保sh命令返回curl的输出内容而非状态码find { it.def == "histro" }:遍历JSON数组,匹配def字段为histro的元素?.安全导航操作符:避免找不到目标元素时调用value触发空指针异常trim():清理输出内容前后的空白字符,保证JSON解析正常
内容的提问来源于stack exchange,提问作者user17058837
相关产品推荐
相关产品推荐

