jq命令行JSON数据处理工具

1. 简介

jq 是一个轻量级、高性能的 JSON 数据处理工具,支持过滤、转换、查询等操作。其语法简洁灵活,广泛用于命令行或脚本中处理 API 返回数据、日志解析等场景。

2. 安装

3. 基本语法

1
2
3
4
5
6
7
8
9
10
jq [options] 'filter' [file...]
```
- filter
:核心表达式,用于提取或转换 JSON 数据。

- file
:输入文件(可选,默认从标准输入读取)。

#### 4. 常见操作符
##### 4.1 访问属性

// 示例数据(data.json){  “name”: “Alice”,  “age”: 30,  “hobbies”: [“coding”, “reading”]}

1
2
3
4
```
# 提取 namejq '.name' data.json# 输出:"Alice"# 访问数组元素jq '.hobbies[0]' data.json# 输出:"coding"
```
##### 4.2 条件过滤

// 示例数据(users.json)[  {“name”: “Bob”, “age”: 25},  {“name”: “Charlie”, “age”: 35}]

1
2
3
4
```
# 筛选年龄大于 30 的用户jq '.[] | select(.age > 30)' users.json# 输出:{"name": "Charlie", "age": 35}# 复合条件(逻辑与)jq '.[] | select(.age > 30 and .name != "Alice")' users.json
```
##### 4.3 数组操作

提取所有用户的姓名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
2
#### 5. 高级功能  
##### 5.1 字符串处理

拼接字符串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
2
3
4
```
# 按类别分组jq 'group_by(.category)' products.json# 计算每个类别的总价格jq 'group_by(.category) | map({category: .[0].category, total: add(.[] | .price)})' products.json
```
##### 5.3 数学运算

计算价格总和jq ‘add(.[] | .price)’ products.json

1
##### 5.4 自定义函数  

定义并调用函数jq ‘def double(x): x * 2; .price | double’ products.json

1
2
#### 6. 实用技巧  
##### 6.1 处理大文件

流式处理(避免内存溢出)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/  
  

![江达小记](/images/wechatmpscan.png)