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
链式操作:先过滤,再提取姓名jq ‘.[] | select(.age > 30) | .name’ users.json
美化 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’
// 示例数据(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
定义并调用函数jq ‘def double(x): x * 2; .price | double’ products.json
1 2
| #### 6. 实用技巧 ##### 6.1 处理大文件
|
流式处理(避免内存溢出)jq --stream ‘select(.[0][0] == “users”)’ large.json
输出中间结果jq ‘debug(.name)’ data.json
#### 8. 参考文档
- jq 官方文档
https://stedolan.github.io/jq/manual/
- jq 命令速查表
https://stedolan.github.io/jq/tutorial/
