jq 入门教程:3步搞定终端里的大段JSON处理
【免费下载链接】jqCommand-line JSON processor项目地址: https://gitcode.com/GitHub_Trending/jq/jq
jq 是一款轻量级的命令行 JSON 处理器,你可以把它理解成"JSON 世界的 sed 和 grep":终端里进来的 JSON 数据,用它就能切片、过滤、转换。如果你经常要处理 API 返回的数据或 JSON 配置文件,装好它一劳永逸。
先看一个真实场景:终端里的 JSON 大墙
你只想要 3 个字段,却倒出一整页
用 curl 请求一次接口,终端哗啦刷出几百行 JSON。你其实只关心其中两三个字段,但它们藏在几十行之后。
翻屏找、复制到编辑器里搜,都挺磨人。你想要的效果是:只把要的那几个字段拿出来,别的都别给我看。
jq 就是干这个的
jq 的思路很简单:JSON 从管道进来,你写一个小小的"过滤器"(比如.name),它就把你关心的部分单独输出来。它用 C 写成、零运行时依赖,同一个二进制文件在 Linux、macOS、Windows 上行为一致,不存在"换台机器就不好用"的问题。
jq 安装完整指南:Linux、macOS、Windows
Linux 和 macOS:一条命令装好
# Ubuntu / Debian sudo apt install jq # CentOS / RHEL sudo yum install jq # macOS(需要先装 Homebrew) brew install jq包管理器装完即用,不用管依赖,也不要用管理员权限以外的额外操作。
Windows:直接拿预编译版本
Windows 上最省事的路径是下载官方发布页的预编译.exe,放进 PATH 目录就能用。如果你已经装了 Chocolatey 这类包管理器,一条命令更简单:
choco install jq当然也可以自己编译源码——仓库里的 Makefile.am 和 configure.ac 就是标准构建入口,但新手强烈建议先用现成的。
装完用一条命令验证
jq --version能打印出版本号(例如jq-1.8.2)就说明安装成功。再跑一条真实命令试试手感:
echo '{"name": "Alice", "age": 30}' | jq '.name'输出是带引号的"Alice",一切就绪。
上手实战:格式化、提取字段、遍历数组
一行命令把 JSON 排版整齐
拿到的 JSON 被压缩成一长行没法看?把它交给jq .就行:
cat config.json | jq ..的意思是"原样通过",但输出会被自动缩进美化。顺带一提,这一步还能当校验用:JSON 本身不合法,它会直接报错。
只提取你要的字段
echo '{"name": "Alice", "age": 30}' | jq '.name'.name就是"取 name 字段"。字段套得深,就继续往下点:.user.name取的是 user 里面的 name。
数组数据一次处理完
输入是数组时,.[]会把元素逐个展开:
echo '[10, 20, 30]' | jq '.[]'每个数字单独占一行输出。这就是 jq 的核心玩法——用|把多个过滤器接起来,筛选、改名、求和这类操作都能一步步拼出来。
常用参数速查:-r、-c、-s
三个最常用参数
| 参数 | 作用 | 什么时候用 |
|---|---|---|
-r | 字符串去掉引号直接输出 | 结果要交给其他命令处理时 |
-c | 紧凑输出,一个 JSON 占一行 | 写日志、再传给下一个工具时 |
-s | 把所有输入读成一个数组 | 需要对多个 JSON 整体操作时 |
引号规则,不同 shell 不一样
jq 程序里有很多 shell 也认的特殊字符,所以程序部分务必加引号:Linux/macOS 用单引号,Windows cmd 用双引号(内部双引号要转义),PowerShell 用单引号。漏掉引号是新手报错的第一大来源。
常见坑与解决办法
命令跑了,却没输出想要的
多半是过滤器路径写错了——字段实际叫name2,你却写了.name,结果就是空。正确做法:先jq .看一眼完整结构,确认层级后再写提取表达式,别靠猜。
报 parse error 时别慌
这说明输入本身不是合法 JSON:多半是少了个逗号、字段名没加引号。报错信息会带上行号和列号,照着位置修就行。
下一步学什么
手册和官方教程
完整的过滤器清单和命令行参数在 docs/content/manual/manual.yml;docs/content/tutorial/default.yml 是一份手把手的示例教程,跟着敲一遍比看十遍都管用。
源码和测试用例
核心实现在 src/ 目录;tests/ 下攒了大量测试脚本,里面几乎每个用例都是一条现成的用法示例,遇到想实现的效果可以来这里翻。
学会.field、.[]、|这三样再记熟-r、-c,今天就可以拿一个真实的 API 响应练手了。
【免费下载链接】jqCommand-line JSON processor项目地址: https://gitcode.com/GitHub_Trending/jq/jq
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考