Linux下解析JSON主要用jq工具,它轻量强大、支持管道;安装后可用.key提取字段、-r原始输出、select()过滤、.[]展开数组等操作处理嵌套与数组数据。

Linux 下解析 JSON 主要用 jq,它轻量、强大、支持管道,是命令行处理 JSON 的事实标准。
安装 jq
大多数发行版自带包管理器可一键安装:
- Ubuntu/Debian:
sudo apt install jq - CentOS/RHEL/Fedora:
sudo yum install jq或sudo dnf install jq -
macOS(Homebrew):
brew install jq
装完运行 jq --version 确认是否就绪。
基础语法:从简单提取开始
jq 的核心是“过滤器”,用点号 . 表示当前对象,用 .key 提取字段,用 .[index] 取数组元素。
例如有文件 user.json:
{
"name": "Alice",
"age": 30,
"hobbies": ["reading", "cycling"]
}
提取姓名:jq '.name' user.json → "Alice"
提取年龄并去掉引号(用 -r 原始输出):jq -r '.age' user.json → 30
取第一个爱好:jq -r '.hobbies[0]' user.json → reading
常用操作:过滤、格式化与组合
实战中常需筛选、重组或拼接数据:
- 过滤对象:
jq 'select(.age > 25)' users.json(保留 age 大于 25 的条目) -
格式化输出为一行:
jq -c '.' data.json - 重命名+精简字段:
jq '{username: .name, years: .age}' user.json - 合并多个 JSON 字段成字符串:
jq -r '.name + " is " + (.age|tostring) + " years old"' user.json
配合 curl 使用很常见,比如查公网 IP:curl -s https://httpbin.org/ip | jq -r '.origin'
进阶技巧:处理嵌套与数组
JSON 经常多层嵌套或含数组。用 .[] 展开数组,| 连接多个操作:
[
{"id": 1, "tags": ["web", "linux"]},
{"id": 2, "tags": ["cli", "json"]}
]
列出所有 tag:jq '.[].tags[]' data.json
只取含 "linux" 的项:jq 'map(select(.tags[] == "linux"))' data.json
统计 tag 总数:jq '[.[]|.tags|length]|add' data.json
基本上就这些。jq 不复杂但容易忽略细节,多练几个真实 JSON 就上手了。










