jq 常用 JSON 处理速查
常用命令
jq '.' data.json
jq '.name' data.json
jq '.items[0].id' data.json
jq '.items[] | .name' data.json
jq '.[] | select(.status == "ok")' data.json
jq '[.items[] | {id, name}]' data.json
jq 'map(.price) | add' data.json
jq 'sort_by(.createdAt) | reverse' data.json
jq 'group_by(.type) | map({type: .[0].type, count: length})' data.json
jq 'keys' data.json
jq -r '.name' data.json
jq -c '.items[]' data.json
jq -s 'add' a.json b.json
常用表达式
| 表达式 |
含义 |
. |
原样输出 |
.foo |
取字段 |
.[0] / .[] |
索引/遍历 |
select() |
过滤 |
map() |
映射 |
sort_by() |
排序 |
group_by() |
分组 |
keys |
键列表 |
length |
长度 |
add |
求和/拼接 |
// |
默认值 |
场景速查
| 目的 |
写法 |
| 提取字段为 CSV |
`jq -r '.items[] |
| 统计数量 |
`jq '.items |
| 按字段求和 |
`jq '[.items[].amount] |
| 合并对象 |
jq -s '.[0] * .[1]' a.json b.json |
| 读取环境变量 |
jq --arg v "$VALUE" '.key = $v' |
| 处理 NDJSON |
jq -c '.id' data.ndjson |
易错点
-r 才输出裸字符串;不加会带引号。
.items[] 遍历数组,.items 输出整个数组。
select 里要用比较表达式,不要写 shell 条件。
- 大文件不要一次性
-s 读入;用流式处理。
- 字段名含特殊字符时用
.["field-name"]。
- 修改 JSON 用
jq ... file > tmp && mv tmp file,避免覆盖读空。
- 复杂转换建议写 jq 脚本文件,便于测试和复用。
相关命令
yq — YAML/JSON 处理
jless — 交互式 JSON 浏览
gron — JSON 转可 grep 的行