目录
01 简介
jq 是一个轻量级且灵活的命令行 JSON 处理器,用于解析、过滤、转换和格式化 JSON 数据。以下是 jq 的详细使用指南:
02 下载与安装
# Ubuntu使用apt直接下载
apt install jq
03 使用
3.1 基本语法
jq [options] <filter> [file...]
-
-r
: 输出原始字符串(去除 JSON 引号) -
-c
: 紧凑模式(单行输出) -
-s
: 将所有输入合并为数组处理 -
--arg
: 传递变量参数 -
--raw-input
: 将输入作为文本行处理 -
从文件或标准输入读取 JSON 数据。
-
若无文件,则从管道(如 curl 输出)读取。
3.2 美化json输出
echo '{"name":"Alice","age":30}' | jq .
3.3 提取字段
# 提取单个字段
echo '{"name":"Alice","age":30}' | jq '.name'
# 提取嵌套字段
echo '{"user":{"name":"Alice"}}' | jq '.user.name'
# 提取多个字段
echo '{"name":"Alice","age":30}' | jq '.name, .age'
3.4 处理数组
# 遍历数组
echo '[1,2,3]' | jq '.[]'
# 按索引访问
echo '[1,2,3]' | jq '.[0]'
# 切片操作
echo '[1,2,3,4,5]' | jq '.[2:4]' # 输出 [3,4]
04 常用过滤器
4.1 管道操作
# 连续处理数据
echo '[{"name":"Alice"},{"name":"Bob"}]' | jq '.[] | .name'
4.2 数学运算
echo '{"x":10,"y":20}' | jq '.x + .y'
4.3 字符串操作
echo '{"name":"alice"}' | jq '.name | upcase' # 转大写
echo '{"name":"ALICE"}' | jq '.name | downcase' # 转小写
echo '{"name":"Alice"}' | jq '.name | length' # 字符串长度
05 高级功能
5.1 条件判断
echo '{"age":25}' | jq 'if .age >= 18 then "adult" else "minor" end'
5.2 数组映射
# 对数组每个元素转换
echo '[1,2,3]' | jq 'map(. * 2)'
5.3 选择过滤
# 筛选数组元素
echo '[{"age":20},{"age":15}]' | jq '.[] | select(.age >= 18)'
5.4 变量传递
jq --arg user "Alice" '.name = $user' input.json
06 案例
6.1 将获取到的json字符串转化为pretty格式
curl -s https://api.github.com/users/octocat/repos | jq
6.2 复杂数据提取
input.json 内容为:
{
"users": [
{"name": "Alice", "age": 25},
{"name": "Bob", "age": 17}
]
}
# 提取成年用户姓名
jq '.users[] | select(.age >= 18) | .name' input.json
6.3 计算后生成新json
echo '{"x":1,"y":2}' | jq '{sum: (.x + .y)}'
# 输出:{"sum": 3}