新手求助:用jq解析JSON提取指定指标actualValue并存储到变量
解决jq提取JSON字段及shell语法错误问题
错误原因分析
你的命令报错本质是两个问题:
- shell语法解析错误:jq脚本没有用引号包裹,导致shell把
select当成了独立的系统命令,触发syntax error near unexpected token 'select'。 - jq表达式语法错误:
.projectStatus.conditions[] 的写法错误,正确的层级访问应该是.projectStatus.conditions[];且遍历数组后不需要用map,直接用select过滤元素即可。
正确解决方案
方案1:分两次请求提取(简单直观)
分别提取两个指标的actualValue并存入变量:
# 提取new_coverage的actualValue到var1 var1=$(curl -u ${TOKEN}: $url | jq -r '.projectStatus.conditions[] | select(.metricKey == "new_coverage") | .actualValue') # 提取new_duplicated_lines_density的actualValue到var2 var2=$(curl -u ${TOKEN}: $url | jq -r '.projectStatus.conditions[] | select(.metricKey == "new_duplicated_lines_density") | .actualValue')
方案2:单次请求同时提取(高效)
只请求一次API,同时获取两个指标值并赋值,避免重复请求:
# 一次请求提取两个值,用制表符分隔后赋值给var1和var2 read var1 var2 <<< $(curl -u ${TOKEN}: $url | jq -r '[.projectStatus.conditions[] | select(.metricKey == "new_coverage" or .metricKey == "new_duplicated_lines_density") | .actualValue] | @tsv')
关键jq语法说明
.projectStatus.conditions[]:遍历projectStatus下的conditions数组的每个元素select(.metricKey == "指标名"):过滤出metricKey匹配目标值的元素.actualValue:提取该元素的actualValue字段@tsv:将jq输出的数组转换为制表符分隔的字符串,方便shell的read命令读取
内容的提问来源于stack exchange,提问作者AhmFM
相关产品推荐
相关产品推荐

