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

如何用Shell脚本读取JSON指标值并实现非零值判断退出

解决方案

1. 提取所有指标及其对应值

使用jq命令可以直接提取measures数组中所有指标与对应值,输出为指标名:值的格式:

jq -r '.component.measures[] | "\(.metric):\(.value)"' your_file.json

执行后会得到类似以下的输出:

ncloc:43
bugs:0
blocker_violations:0
info_violations:0
critical_violations:0
vulnerabilities:0
major_violations:0
code_smells:0
minor_violations:0
reliability_rating:1.0
security_rating:1.0

2. 检查所有指标值是否全为0的脚本实现

你之前的脚本存在路径错误(误将指标名当作字段名)、未正确包裹命令等问题,以下是两种正确实现方式:

方式一:直接用jq判断并返回状态

利用jq的any()函数检测是否存在非0值,结合-e选项让jq返回对应退出码:

jq -e 'any(.component.measures[]; .value != "0")' your_file.json > /dev/null
if [ $? -eq 0 ]; then
    # 存在任意非0值,退出码设为1
    exit 1
else
    # 所有值都是0,退出码设为0
    exit 0
fi

方式二:先输出指标值再检查

如果需要先打印所有指标值,再执行检查逻辑:

# 先输出所有指标与对应值
jq -r '.component.measures[] | "\(.metric):\(.value)"' your_file.json

# 检查是否存在非0值
if jq -e 'any(.component.measures[]; .value != "0")' your_file.json > /dev/null; then
    exit 1
else
    exit 0
fi

关键注意点

  • JSON中的value是字符串类型,比较时需用"0"而非数字0,避免类型不匹配导致判断错误;
  • 类似reliability_rating这类值为"1.0"的指标,会被正确判定为非0值,符合需求。

内容的提问来源于stack exchange,提问作者Vasantha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:55:26