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

使用jq在Shell脚本中检测嵌套JSON的base_score是否大于7.0

解决方案

可以用jq的递归遍历和any()函数实现这个需求,以下是完整的Shell脚本:

#!/bin/bash

# 检测JSON中是否存在至少一个base_score大于7.0
if jq -e 'any(..; .base_score? | numbers > 7.0)' >/dev/null; then
    exit 1
fi

关键细节说明:

  • ..:递归遍历JSON的所有节点,不管嵌套层级有多深
  • .base_score?:使用可选链操作符,避免遇到没有base_score字段的节点时抛出错误
  • numbers:确保只处理数字类型的base_score值,过滤掉字符串等非数字的无效值
  • any(..; 条件):jq内置函数,只要存在任意一个节点满足指定条件,就返回true
  • -e:让jq的退出码与输出的布尔值对应——输出true时退出码为0,false时为1,方便Shell脚本判断
  • >/dev/null:屏蔽jq的标准输出,只关注其退出码

用法示例:

  1. 如果JSON数据来自标准输入(比如管道传递):
    cat your_data.json | ./check_score.sh
    
  2. 如果JSON数据来自文件:
    修改脚本中的jq命令,直接指定文件路径:
    if jq -e 'any(..; .base_score? | numbers > 7.0)' your_data.json >/dev/null; then
        exit 1
    fi
    

测试验证:

  • 当JSON中存在base_score >7.0时,脚本会执行exit 1
  • 当所有base_score都≤7.0或不存在该字段时,脚本正常退出(退出码0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:30:54