Linux jq 命令 - 轻量级 JSON 解析转换格式化处理工具
• 最后修改:2025-07-25 • 阅读量:20
jq
是 Linux/Unix/FreeBSD 系统中功能强大的轻量级 JSON 处理器,专门用于解析、转换和格式化 JSON 数据。通过简洁的查询语法,jq 可以高效处理 API 响应、配置文件等结构化数据,是开发者和运维人员的必备工具。本教程全面解析 jq 的核心功能、安装方法和高级应用技巧。
jq 命令释义
jq ( JSON Query Processor ) 是一个基于命令行的 JSON 处理工具:
- 🧩 数据提取:使用路径表达式查询 JSON 元素
- 🔄 格式转换:修改 JSON 结构或转换为其他格式
- 🧠 数据操作:支持过滤、映射、归约等复杂操作
- 🎨 输出美化:格式化压缩的 JSON 数据
- 📊 统计分析:计算聚合值和数据指标
ℹ️ jq 使用类似 JavaScript 的语法但更简洁,支持管道式数据处理
jq 命令语法
jq [OPTIONS] FILTER [FILE...]
jq [OPTIONS] -f FILTERFILE [FILE...]
FILTER
:处理 JSON 的查询表达式(必需)[FILE...]
:输入的 JSON 文件(可多个,不指定则读取 stdin)[OPTIONS]
:控制处理行为的选项(详见下方)-f FILTERFILE
:从文件读取过滤器脚本
jq 命令示例
1. 基础属性提取
echo '{"name":"Alice","age":30}' | jq '.name'
- 过滤器说明:
.name
提取 name 属性 - 输出结果:
"Alice"
- 适用场景:快速获取 API 响应的特定字段
2. JSON 美化输出
curl -s https://api.github.com/users/octocat | jq '.'
- 过滤器说明:
.
表示整个输入对象 - 功能说明:将压缩 JSON 转换为易读格式
- 输出效果:
{
"login": "octocat",
"id": 583231,
"avatar_url": "https://avatars.githubusercontent.com/u/583231?v=4",
...
}
3. 数组迭代处理
echo '[{"id":1,"active":true},{"id":2,"active":false}]' | jq '.[] | select(.active==true)'
- 过滤器说明:
.[]
:展开数组元素select(.active==true)
:筛选 active 为 true 的对象
- 输出结果:
{"id":1,"active":true}
- 适用场景:过滤符合条件的 JSON 数组元素
4. 数据转换与计算
echo '{"products":[{"name":"A","price":25},{"name":"B","price":40}]}' | jq '.products | map(.price * 1.2) | add'
- 过滤器说明:
map(.price * 1.2)
:为每个产品计算含税价(20%税率)add
:对结果数组求和
- 输出结果:
78
- 适用场景:JSON 数据的统计分析
5. 复杂结构重构
curl -s https://api.coingecko.com/api/v3/coins/bitcoin | jq '{name, symbol, current_price: .market_data.current_price.usd}'
- 过滤器说明:创建新对象并映射字段
- 适用场景:API 数据精简与重构
- 输出效果:
{
"name": "Bitcoin",
"symbol": "btc",
"current_price": 23456.78
}
命令选项详解
短选项 | 长选项 | 说明 |
---|---|---|
-c |
--compact-output |
紧凑输出(单行 JSON) |
-r |
--raw-output |
输出原始字符串(非 JSON 格式) |
-s |
--slurp |
将输入流读取为单个数组 |
-f FILE |
--from-file FILE |
从文件读取过滤器 |
-L PATH |
--search-path PATH |
设置模块搜索路径 |
--arg VAR VAL |
- | 定义变量(VAL 作为字符串) |
--argjson VAR JSON |
- | 定义变量(JSON 作为 JSON 对象) |
--slurpfile VAR FILE |
- | 将文件内容读取到变量 |
--indent N |
- | 设置缩进空格数(默认 2) |
--color-output |
- | 启用彩色输出 |
--monochrome-output |
- | 禁用彩色输出 |
-M |
--mono |
单色输出(兼容别名) |
-S |
--sort-keys |
对象按键名排序 |
-j |
--join-output |
连续输出无换行 |
-n |
--null-input |
使用 null 作为输入 |
-R |
--raw-input |
将输入视为原始字符串 |
-C |
--csv |
输出 CSV 格式 |
--tab |
- | 使用制表符缩进 |
-V |
--version |
显示版本信息 |
系统安装说明
Debian / Ubuntu
sudo apt update
sudo apt install jq
RHEL / AlmaLinux / Rocky Linux
sudo yum install jq # RHEL/CentOS 7
sudo dnf install jq # RHEL 8+/Alma/Rocky
FreeBSD
sudo pkg install jq
Arch Linux
sudo pacman -S jq
📌 验证安装:
jq --version
相似命令对比
命令 | JSON 支持 | 查询语法 | 流处理 | 学习曲线 |
---|---|---|---|---|
jq | ✅ 完整 | ✅ 强大 | ✅ 优秀 | ⭐⭐⭐ |
grep | ❌ 有限 | ❌ 无 | ✅ 优秀 | ⭐ |
awk | ⚠️ 基础 | ⚠️ 基础 | ✅ 优秀 | ⭐⭐⭐⭐ |
python -m json.tool | ✅ 完整 | ❌ 无 | ❌ 差 | ⭐⭐ |
yq | ⚠️ 部分 | ⚠️ 部分 | ✅ 优秀 | ⭐⭐ |
结语
jq 是处理 JSON 数据的终极利器,核心优势:
- 高效查询:复杂 JSON 路径的简洁表达
- 流式处理:支持管道操作和链式过滤
- 格式转换:轻松实现 JSON / CSV / TSV 互转
- 跨平台:兼容所有主流 *nix 系统
最佳实践:
# 监控 Docker 容器状态
docker stats --no-stream --format json | jq -s 'map({name: .Name, cpu: .CPUPerc, mem: .MemPerc})'
# 分析日志中的 JSON 数据
tail -f /var/log/app.log | grep "REQUEST" | jq '{timestamp, method, path}'
# 批量处理配置文件
find /etc/apps/ -name "*.json" | xargs -I{} jq '.timeout *= 2' {} > {}.new
💡 专业提示:使用
jq play
(https://jqplay.org) 在线测试过滤器