jq 是一个轻量级且功能强大的 Linux 命令行 JSON 处理器,支持解析、过滤、转换和格式化 JSON 数据,适用于脚本自动化处理。 以下是详细说明与使用实例:
一、安装与验证- Linux 安装
Ubuntu/Debian: sudo apt-get install jq
CentOS/RHEL: sudo yum install jq
Fedora: sudo dnf install jq
- macOS 安装
Homebrew: brew install jq
- 验证安装jq --version
二、基本语法jq [options] <filter> [file...]- 常用选项
-c: 紧凑输出(不美化)
-r: 输出原始字符串(去除引号)
-s: 将输入流读入数组
--arg: 定义变量
--slurp: 合并多个 JSON 对象到数组
三、核心操作示例1. 基本解析- 获取全部内容(美化输出)jq '.' data.json
- 提取字段jq '.name' data.json # 输出: "John Doe"
- 提取嵌套字段jq '.address.city' data.json # 输出: "New York"
2. 数组操作- 获取元素jq '.hobbies[0]' data.json # 输出: "reading"jq '.hobbies[1:3]' data.json # 输出: ["hiking", "coding"]
- 计算数组长度jq '.hobbies | length' data.json # 输出: 3
3. 条件过滤- 筛选满足条件的对象jq '.[] | select(.age > 25)' users.json
4. 数据转换- 创建新对象jq '{fullName: .name, city: .address.city}' data.json# 输出: {"fullName": "John Doe", "city": "New York"}
- 数学运算jq '.age * 2' data.json # 输出: 60
5. 多文件处理- 合并文件内容jq -s '.[0] + .[1]' file1.json file2.json
四、高级用法1. 使用变量jq --arg new_city "Boston" '.address.city = $new_city' data.json2. 处理 API 响应curl -s https://api.example.com/users
| jq '.[] | {name: .name, email: .email}'3. 复杂转换(如 CSV 格式)jq -r '["Name", "Age"], (.[] | [.name, .age]) | @csv' users.json4. 错误处理jq 'try .unknown_field catch "default value"' data.json五、实际应用场景1. 日志分析cat app.log | jq 'select(.level == "error") | {time: .timestamp, message: .msg}'2. 配置修改jq '.config.timeout = 30' config.json > temp.json && mv temp.json config.json3. 数据统计jq '[.[].age] | add / length' users.json # 计算平均年龄六、常见问题解决- 处理大型文件使用流式模式避免内存溢出:jq -n 'inputs | select(.value > 100)' hugefile.json
- 保留特殊字符避免 -r 转义,改用 -j 拼接输出:jq -j '.' file.json
- 合并多个 JSON 文件jq -s 'add' file1.json file2.json
七、总结通过掌握 jq,可显著提升命令行环境下 JSON 数据的处理效率,尤其适用于日志分析、配置管理及 API 数据清洗等场景。