核心用法
jq 是一个轻量级命令行 JSON 处理器,采用类似 sed 的过滤器语法处理 JSON 数据流。核心操作模式为 jq '[filter]' [input.json],支持从标准输入或文件读取。
关键能力矩阵:
- 提取:
.key访问对象字段,[0]索引数组,[]迭代元素 - 过滤:
select(.age > 25)条件筛选,group_by(.category)分组聚合 - 变换:
{new: .old}重命名键,del(.password)删除字段,. + {timestamp: now}添加计算字段 - 格式化:
-r原始输出(去除引号),-c紧凑模式,@csvCSV 转换
典型工作流:
# API 数据提取与重构
curl api.example.com | jq '.data[] | {id, name, email}'
# 配置文件批量处理
jq '.database.host = "prod-db"' config.json
# 数据聚合统计
jq '[.items[].price] | add' sales.json显著优点
1. 零依赖轻量化: 单二进制文件,<1MB,全平台支持
2. 管道友好: 原生适配 Unix 哲学,与 curl、grep、diff 无缝衔接
3. 表达力强大: 支持变量、函数定义、递归下降等完整编程构造
4. 输出灵活: 内置 JSON Lines、CSV、TSV、Shell 字符串等格式导出
5. 生态成熟: 2012 年发布,经过 10+ 年生产验证,文档详尽
局限性与风险
| 问题 | 说明 |
|------|------|
| 学习曲线 | 过滤器语法独特,复杂嵌套查询可读性下降 |
| 大文件处理 | 默认全量加载,GB 级 JSON 需配合 `--slurp` 策略 |
| 类型弱约束 | 缺失字段返回 `null` 而非报错,易引发静默错误 |
| 原地修改 | 无内置 `-i` 参数,需手动重定向临时文件 |
| 无 schema 验证 | 仅能校验语法,无法检验数据结构合规性 |
适合人群
- DevOps/SRE: 处理 Kubernetes/API 返回的复杂 JSON
- 后端开发: 日志分析、配置文件管理、测试数据构造
- 数据工程师: 轻量级 ETL、JSON 数据探查与清洗
- 安全研究员: 快速提取漏洞扫描器、API 响应中的关键字段
常规风险
- 数据泄漏:
jq -r '.users[].password'等命令可能在 shell history 留存敏感字段 - 破坏性操作: 错误过滤器导致数据截断,建议先用
| length验证结果规模 - 编码问题: 处理非 UTF-8 输入可能产生乱码,需前置
iconv转换