jq 常用命令 - 码剑客

JSON 的取值、过滤、重构、统计与格式转换技巧,覆盖 API 响应与 JSON 日志的典型场景。

jq 1.6+更新于 2026-10-29共 30 条

取值与管道

格式化并高亮输出完整 JSON

jq '.' data.json

读取嵌套对象中的字段

jq '.user.name' data.json

读取数组首个元素的字段

jq '.items[0].id' data.json

展开数组,逐个输出元素

jq '.items[]' data.json

字段缺失或为 null 时给默认值

jq '.user.name // "unknown"' data.json

过滤与映射

过滤出满足条件的元素

jq '.[] | select(.age > 18)' users.json

提取字段组成新数组

jq 'map(.name)' users.json

统计满足条件的记录数

jq '[.[] | select(.active)] | length' users.json

过滤后直接取指定字段

jq '.[] | select(.role == "admin") | .email' users.json

按数组字段是否包含某值过滤

jq '.[] | select(.tags | index("vue"))' posts.json

对象构造与删除

构造只含所需字段的新对象

jq '{name: .user.name, city: .user.city}' data.json

删除敏感字段后再输出

jq 'del(.password, .token)' user.json

用简写重组数组元素字段

jq '.items | map({id, price})' data.json

给对象合并新增字段

jq '. + {env: "prod"}' data.json

按键名过滤对象字段

jq 'to_entries | map(select(.key != "password")) | from_entries' user.json

排序分组统计

按字段升序排序

jq 'sort_by(.price)' products.json

按数值字段降序排序

jq 'sort_by(-.price)' products.json

按字段分组并统计数量

jq 'group_by(.category) | map({category: .[0].category, count: length})' products.json

对某数值字段求和

jq '[.[].price] | add' products.json

按字段去重,保留首次出现

jq 'unique_by(.email)' users.json

格式转换与输出

去掉字符串引号,便于脚本使用

jq -r '.items[].name' data.json

-r 只影响字符串,数字本来就不带引号

压缩为单行,适合日志与管道

jq -c '.' data.json

输出 CSV,可重定向为表格文件

jq -r '.[] | [.id, .name] | @csv' users.json

输出制表符分隔文本

jq -r '.[] | [.id, .name] | @tsv' users.json

把 shell 变量作为参数传入表达式

jq --arg env "prod" '.env = $env' data.json

实战场景

合并多个 JSON 数组为一个数组

jq -s 'add' a.json b.json

-s 会把全部输入整体读成一个数组

逐行筛选 JSON 日志中的错误

jq -c 'select(.level == "error")' app.log

要求每行一个完整 JSON,否则解析报错

用 shell 变量与当前时间生成 JSON

jq -n --arg v "$(git rev-parse --short HEAD)" '{"version": $v, "builtAt": (now | todate)}' > meta.json

递归提取所有含 id 的对象字段

jq '.. | objects | select(has("id")) | .id' data.json

把嵌套结构压平为点分键对象

jq 'reduce paths(scalars) as $p ({}; .[($p | join("."))] = getpath($p))' data.json

相关工具

本网站使用 Cookie 以确保您在我们的网站上获得最佳体验。 隐私政策.