324 字
2 分钟
jq:命令行里处理 JSON 的瑞士军刀

API 返回的 JSON 越来越肥,肉眼读不动,Python 起进程又嫌重。jq 编译成 C,处理几百 MB 的文件也是瞬间的事,值得把常用表达式背下来。

看结构#

Terminal window
curl -s https://api.github.com/repos/vercel/next.js | jq '. | keys'

拿到陌生接口先列 key,比翻文档快。

过滤和取值#

Terminal window
jq '.items[] | select(.stargazers_count > 1000) | .full_name'

.[] 展开数组,select 按条件过滤,竖线串联。读法接近自然语言:取出每项,筛出星数过千的,留下全名。

统计#

Terminal window
jq '[.[] | select(.state == "open")] | length'

中括号把过滤结果重新收集成数组,length 计数。

改造结构#

Terminal window
jq 'map({name: .full_name, stars: .stargazers_count})'

map 加对象构造,输出干净得可以直接贴进报告。再配 -r 去掉字符串引号,输出直接能进 shell 循环。

转成 TSV 交给 awk#

Terminal window
jq -r '.[] | [.name, .size, .default_branch] | @tsv' | column -t

@tsv 是关键一步,jq 的输出和文本工具的输入在这里接上头。JSON 世界和 Unix 世界本来隔着一层,这条管道把它们焊在一起。

一个省 finger 的技巧#

交互式排查时用 jq 'keys' 比翻官方文档 schema 快得多,接口字段都摆在明处。写脚本时再把确定下来的表达式固化进去,避免盲猜字段名。

jq:命令行里处理 JSON 的瑞士军刀
https://oliver6868686.tech/posts/jq-json-cli/
作者
Oli
发布于
2026-02-28
许可协议
CC BY-NC-SA 4.0