深入理解 `jq`:命令行处理 JSON 的利器
深入理解 jq
:命令行处理 JSON 的利器
1. 引言
在处理 API 返回的数据、日志文件或自动化脚本时,我们常常会遇到结构化的 JSON 数据。jq
是一个轻量级、灵活而强大的命令行 JSON 处理工具,它就像是 sed
或 awk
,但专门用于 JSON。
本篇文章将深入讲解 jq
的基本用法、常见场景、进阶语法以及组合命令示例,帮助你在终端下轻松处理复杂的 JSON 数据。
2. 安装 jq
Linux
大多数 Linux 发行版都可通过包管理器安装:
# Debian/Ubuntu
sudo apt install jq
# CentOS/RHEL
sudo yum install jq
macOS
brew install jq
Windows
- 推荐使用 Chocolatey 安装:
choco install jq
- 或从 https://stedolan.github.io/jq/download/ 下载可执行文件。
3. 基本语法结构
cat file.json | jq '<过滤器>'
或直接处理命令输出:
curl -s https://api.example.com/data | jq '<过滤器>'
4. 常见用法示例
读取键值
jq '.name' data.json
读取嵌套值
jq '.user.profile.age' data.json
提取数组元素
jq '.users[0].name' data.json
遍历数组并提取字段
jq '.users[] | .id' data.json
5. 实用技巧
输出压缩 JSON(单行)
jq -c '.' data.json
获取多个字段(对象构造)
jq '{name: .name, age: .profile.age}' data.json
使用变量(bash 中传参)
name="Alice"
jq --arg name "$name" '.users[] | select(.name == $name)' data.json
过滤数组条件
jq '.users[] | select(.age > 25)' data.json
6. 高级用法
修改字段值
jq '.user.age = 30' data.json
删除字段
jq 'del(.password)' data.json
合并两个 JSON 文件
jq -s '.[0] + .[1]' file1.json file2.json
使用 jq 解析多层 JSON 并格式化输出
jq -r '.users[] | "\(.id): \(.name) - \(.email)"' data.json
7. 与 curl 配合使用
将 REST API 的 JSON 响应格式化、美化:
curl -s https://api.example.com/data | jq .
提取返回中的 token:
curl -s https://api.example.com/login | jq -r '.token'
组合 POST 请求与处理:
curl -s -X POST -H "Content-Type: application/json" \
-d '{"username":"admin","password":"123"}' \
https://api.example.com/login | jq -r '.token'
8. 常用过滤器和运算符速查表
表达式 | 说明 |
---|---|
. |
当前对象 |
.key |
获取键 |
[] |
数组元素 |
| |
管道(连接多个操作) |
select(expr) |
选择符合条件的项 |
map(expr) |
对数组每一项应用操作 |
length |
获取数组或字符串长度 |
keys |
返回对象所有键的数组 |
9. 常见实用场景示例
示例 1:提取 IP 地址
curl -s https://api.ipify.org?format=json | jq -r '.ip'
示例 2:过滤 Kubernetes Pod 状态
kubectl get pods -o json | jq '.items[] | {name: .metadata.name, status: .status.phase}'
示例 3:从 JSON 中生成 curl 命令
cat apis.json | jq -r '.endpoints[] | "curl -X GET " + .url'
10. 总结
jq
是处理 JSON 数据的命令行利器,功能非常强大。- 它在调试 API、自动化脚本、日志处理和 DevOps 场景中都有广泛用途。
- 掌握
jq
可以显著提升终端数据处理效率。
11. 参考资料
- 官方文档:https://stedolan.github.io/jq/manual/
- jq 教程合集:https://github.com/stedolan/jq/wiki/Cookbook
- jq 在线测试工具:https://jqplay.org/