用途:jq 是标准的命令行 JSON 查询与重塑工具。本技能覆盖实用、专家级用法,包括过滤深层嵌套数据、转换结构、聚合数值,以及把 jq 组合进 shell 管道,示例可直接复制用于真实工作流。
适用时机:解析来自 API、CLI 工具(AWS、GitHub、kubectl、docker)或日志文件的 JSON 输出;转换 JSON 结构(重命名键、展平数组、分组记录);在 bash 脚本或一行命令中使用 jq;解释复杂 jq 表达式的作用。
主要能力:jq 接收过滤表达式并作用于 JSON 输入,过滤器用管道(|)组合,原生处理数组、对象、字符串、数字、布尔和 null。支持基础选择(.name、.user.email、.[1]、.[2:4]、.[])、select 过滤(select(.role == "admin")、数值比较、非空判断、多条件组合)、映射与转换(map(.name)、构造新对象、计算字段、重命名键)、聚合与 reduce(add、length、max_by、min_by、reduce、group_by)、字符串插值与格式化(@csv、@tsv、@uri、@base64)、键与路径操作(keys、has、del、递归下降、paths)、条件与错误处理(if-then-else、// 回退、try-catch、// empty)。
使用方式:从文件读取用 jq '.users' data.json;紧凑输出用 -c;向 jq 传 shell 变量用 --arg 与 --argjson;多行 JSON 合并用 -s;可配合 kubectl、gh、aws、docker 等命令的 JSON 输出。最佳实践:传给 shell 变量时用 -r;用 --arg/--argjson 安全注入变量;优先 map(f);用 -c 处理换行分隔 JSON;先用 jq -n 交互测试;用 empty 丢弃不需要的元素。
限制与安全:jq 设计为只读,不能写文件或执行命令;不要把不可信 JSON 字段值直接嵌入 shell 命令,应加引号或用 --arg。常见问题包括键名拼写错误导致输出 null、数字被引号包裹(应改用 --argjson)、脚本中过滤字符串需用单引号、空数组 add 返回 null(用 add // 0)、大文件流式处理慢(可用 jq --stream 或 jstream/gron)。仅在任务明确匹配上述范围时使用本技能,输出不能替代针对具体环境的验证、测试或专家审查;若缺少必要输入、权限、安全边界或成功标准,应停止并请求澄清。