jq命令行JSON数据处理工具
1. 简介
jq 是一个轻量级、高性能的 JSON 数据处理工具,支持过滤、转换、查询等操作。其语法简洁灵活,广泛用于命令行或脚本中处理 API 返回数据、日志解析等场景。
2. 安装
-
Ubuntu/Debian
:sudo apt-get install jq -
macOS
:brew install jq -
Windows
:下载二进制文件
https://stedolan.github.io/jq/download/
3. 基本语法
1 | jq [options] 'filter' [file...] |
// 示例数据(data.json)
{
“name”: “Alice”,
“age”: 30,
“hobbies”: [“coding”, “reading”]
}
1 | ``` |
// 示例数据(users.json)
[
{“name”: “Bob”, “age”: 25}, {“name”: “Charlie”, “age”: 35}
]
1 | ``` |
提取所有用户的姓名
jq ‘.[] | .name’ users.json
输出:“Bob”, “Charlie”
转换数组元素
jq ‘.[] | {name: .name, age: .age + 1}’ users.json
输出每个用户年龄加 1
1 | ##### 4.4 管道符(|) |
链式操作:先过滤,再提取姓名
jq ‘.[] | select(.age > 30) | .name’ users.json
1 | ##### 4.5 格式化输出 |
美化 JSON(默认缩进)
jq ‘.’ data.json
指定缩进(如 2 空格)
jq --indent 2 ‘.’ data.json
输出原始字符串(不包含引号)
jq -r ‘.name’ data.json
1 | #### 5. 高级功能 |
拼接字符串jq --arg name “Alice” ‘.message + " " + $name’
分割字符串
jq ‘split(“,”)’ <<< ‘apple,banana,orange’
1 | ##### 5.2 分组与聚合 |
// 示例数据(products.json)
[
{“category”:“electronics”,“price”:100},
{“category”:“books”,“price”:50},
{“category”:“electronics”,“price”:200}
]
1 | ``` |
计算价格总和
jq ‘add(.[] | .price)’ products.json
1 | ##### 5.4 自定义函数 |
定义并调用函数
jq ‘def double(x): x * 2; .price | double’ products.json
1 | #### 6. 实用技巧 |
流式处理(避免内存溢出)
jq --stream ‘select(.[0][0] == “users”)’ large.json
1 | ##### 6.2 从 API 获取数据 |
结合 curl 使用
curl https://api.example.com/data | jq ‘.results[0].id’
1 | ##### 6.3 调试复杂表达式 |
输出中间结果
jq ‘debug(.name)’ data.json
1 | #### 7. 示例总结 |
从 API 获取用户数据并格式化输出
curl -s https://jsonplaceholder.typicode.com/users | jq ‘.[] | {name: .name, email: .email}’
#### 8. 参考文档
- jq 官方文档
https://stedolan.github.io/jq/manual/
- jq 命令速查表
https://stedolan.github.io/jq/tutorial/
