[Tool] jq: 轻量json处理器,解析、过滤、格式转换

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}
posted on 2025-10-21 22:18  风惊庭前叶  阅读(6)  评论(0)    收藏  举报