You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:用jq解析JSON提取指定指标actualValue并存储到变量

解决jq提取JSON字段及shell语法错误问题

错误原因分析

你的命令报错本质是两个问题:

  1. shell语法解析错误:jq脚本没有用引号包裹,导致shell把select当成了独立的系统命令,触发syntax error near unexpected token 'select'。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 08:47:24