如何用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
相关产品推荐
相关产品推荐

