正在加载,请稍候…

jq:命令行 JSON 处理利器

掌握 jq 在终端中进行 JSON 查询和转换,学习过滤器、函数和模式,用于处理 API 和配置文件。

jq: JSON Processing in the Command Line

jq:命令行 JSON 处理利器

jq 是一个轻量级、灵活的命令行 JSON 处理器。

基本过滤

# 美化输出
echo '{"name":"Alice","age":30}' | jq '.'

# 获取字段
echo '{"name":"Alice","age":30}' | jq '.name'
# 输出: "Alice"

# 获取嵌套字段
echo '{"user":{"email":"alice@example.com"}}' | jq '.user.email'

# 获取数组元素
echo '[1,2,3]' | jq '.[1]'
# 输出: 2

# 数组切片
echo '[1,2,3,4,5]' | jq '.[2:4]'
# 输出: [3,4]

jq: JSON Processing in the Command Line illustration

数组操作

# 获取所有元素
curl https://api.example.com/users | jq '.[]'

# 映射数组
curl https://api.example.com/users | jq '[.[] | {id, name, email}]'

# 过滤数组
curl https://api.example.com/users | jq '[.[] | select(.active == true)]'

# 获取数组长度
curl https://api.example.com/users | jq 'length'

# 首/末元素
curl https://api.example.com/users | jq 'first, last'

jq: JSON Processing in the Command Line illustration

转换

# 构建新对象
echo '{"first":"John","last":"Doe"}' | jq '{fullName: (.first + " " + .last)}'

# 添加字段
echo '{"name":"Alice"}' | jq '. + {role: "admin"}'

# 删除字段
echo '{"name":"Alice","password":"secret"}' | jq 'del(.password)'

# 重命名字段
echo '{"user_name":"alice"}' | jq '{username: .user_name}'

jq: JSON Processing in the Command Line illustration

字符串操作

# 字符串插值
echo '{"name":"World"}' | jq '"Hello, \(.name)!"'

# 分割/连接
echo '"a,b,c"' | jq 'split(",")'
echo '["a","b","c"]' | jq 'join(",")'

# 字符串测试
echo '{"url":"https://api.example.com"}' | jq 'select(.url | startswith("https"))'

实际示例

# 提取 Docker 镜像名称
docker ps --format '{{json .}}' | jq -r '.Image'

# 解析 AWS CLI 输出
aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | [.InstanceId, .State.Name] | @tsv'

# 处理 GitHub API
curl https://api.github.com/repos/owner/repo/releases | jq -r '.[0] | {tag: .tag_name, date: .published_at}'

# 解析 Kubernetes Pods
kubectl get pods -o json | jq -r '.items[] | select(.status.phase != "Running") | .metadata.name'

变量和函数

# 定义变量
echo '5' | jq '. as $x | $x * $x'

# 归约
echo '[1,2,3,4,5]' | jq 'reduce .[] as $x (0; . + $x)'
# 输出: 15

# 分组
echo '[{"type":"a","val":1},{"type":"b","val":2},{"type":"a","val":3}]' | jq 'group_by(.type)'

jq 将复杂的 API 响应转换为您所需的确切数据。