在 Ubuntu 26.04 下用 jq 处理 JSON 数据的实用技巧,从简单查看、过滤、提取,到循环、拼接、条件判断,全是日常脚本里真正用得上的用法。
在 Ubuntu 26.04 里处理 API 返回、配置文件、日志时,JSON 格式随处可见。
jq 就是专门干这个的神器,轻量、高效、Shell 脚本必备。
先确保安装好:
sudo apt update
sudo apt install jq -y
下面全是实战型用法,不搞花里胡哨,直接复制就能用。
1. 基础:格式化 JSON,让杂乱内容变整齐
很多接口返回压缩成一行,根本没法看。
echo '{"name":"server","ip":"192.168.1.10","status":"running"}' | jq .
自动格式化、缩进、高亮,一目了然。
2. 提取单个字段
最常用的就是取某个值。
data='{"id":1001,"name":"Ubuntu","version":"26.04"}'
echo $data | jq -r .name
输出:
Ubuntu
-r 代表去掉引号,脚本里赋值特别方便。
3. 提取多层嵌套 JSON
实际配置大多是嵌套的。
echo '{"server":{"lan":{"ip":"10.0.0.5"}}}' | jq -r .server.lan.ip
直接层级点下去就行。
4. 遍历数组,逐条取出内容
很多接口返回数组结构,批量处理必备。
echo '[{"name":"a","port":80},{"name":"b","port":443}]' | jq .[].name
也可以循环下标:
jq .[1] # 取第二条
jq .[0] # 取第一条
5. 过滤数组:只保留符合条件的项
比如只保留状态为 running 的服务。
echo '[{"name":"nginx","status":"stopped"},{"name":"docker","status":"running"}]' \
| jq '.[] | select(.status=="running")'
6. 只显示需要的字段,精简输出
不想看整段 JSON,只保留关键字段。
echo '{"name":"api","url":"https://example.com","code":200,"time":120}' \
| jq '{name,url}'
输出一个精简结构:
{
"name": "api",
"url": "https://example.com"
}
7. 结合 curl 处理 API 数据
这是运维最常用的组合。
curl -s https://api.github.com/meta | jq -r .ips[]
8. 检查 JSON 是否合法
写脚本时非常有用,避免格式错误炸脚本。
echo "{}" | jq . > /dev/null && echo "合法JSON"
9. 从 JSON 中批量取出值,做成列表
用于 Shell 循环遍历。
for ip in $(echo '["1.1.1.1","8.8.8.8"]' | jq -r .[]); do
echo "IP: $ip"
done
10. 修改、替换 JSON 中的值
不改变结构,只更新内容。
echo '{"port":80}' | jq '.port=8080'
11. 删除字段
echo '{"name":"test","password":"123456"}' | jq 'del(.password)'
12. 长度、判断、简单计算
echo '{"items":[1,2,3]}' | jq '.items | length'
总结(Ubuntu 26.04 环境下记住这些就够)
jq .格式化 JSONjq -r .字段提取值(无引号)jq .[]遍历数组jq select(条件)过滤内容jq {a,b}精简输出- 配合 curl、循环脚本无敌
日常写运维脚本、处理配置、解析接口,jq 基本能包办所有 JSON 操作,比自己写 Python 快得多。