如何通过jq根据变量中的prId值获取对应IS_CR字段值
问题原因与解决方法
你的命令返回null的核心原因是:--arg传入的$v是字符串类型,但JSON中的prId是数值类型,类型不匹配导致比较失败。
修正方案1:将字符串变量转为数值
把传入的$v通过tonumber转为数值后再比较,修正后的两条命令如下:
第一条命令修正版
jq --arg v "$PRID" '.[] | select(.prId == ($v | tonumber)).IS_CR' services.json
第二条命令修正版
jq --arg v "$PRID" 'to_entries | map(select(.value.prId == ($v | tonumber)))[0].value.IS_CR' services.json
修正方案2:直接传入数值类型变量
如果你的$PRID本身就是纯数字,可以用--argjson替代--arg,它会直接将变量解析为JSON数值类型:
jq --argjson v "$PRID" '.[] | select(.prId == $v).IS_CR' services.json
验证技巧
可以先查看传入变量的类型,确认问题:
jq --arg v "$PRID" '$v | type' services.json
执行后会返回"string",而JSON中prId的类型是"number",这就是比较失败的关键。
内容的提问来源于stack exchange,提问作者Venu Reddy
相关产品推荐
相关产品推荐

