JSON文件处理命令Linux jq 命令
jq 的主要特点
- 流式处理:可以处理任意大小的 JSON 数据
- 丰富的操作符:提供多种操作符来处理 JSON 数据结构
- 格式化输出:可以美化 JSON 输出,提高可读性
- 跨平台:可在 Linux、macOS 和 Windows(通过 WSL)上运行
安装 jq
在大多数 Linux 发行版中,可以通过包管理器轻松安装 jq:
实例
# Ubuntu/Debian
sudo apt-get install jq
# CentOS/RHEL
sudo yum install jq
# Fedora
sudo dnf install jq
# macOS (使用 Homebrew)
brew install jq
sudo apt-get install jq
# CentOS/RHEL
sudo yum install jq
# Fedora
sudo dnf install jq
# macOS (使用 Homebrew)
brew install jq
安装完成后,可以通过以下命令验证安装是否成功:
jq --version
基本语法
jq 的基本命令格式如下:
jq [options] [file...]
常用选项参数
| 选项 | 说明 |
|---|---|
-c |
紧凑输出(不美化) |
-r |
输出原始字符串(去除 JSON 引号) |
-s |
将整个输入流读取到数组中 |
-M |
禁用颜色输出 |
--arg |
定义变量 |
--slurp |
将多个 JSON 对象读入数组 |
常用操作示例
1. 基本 JSON 解析
假设我们有一个名为 data.json 的文件,内容如下:
实例
{
"name": "John Doe",
"age": 30,
"isActive": true,
"address": {
"street": "123 Main St",
"city": "New York"
},
"hobbies": ["reading", "hiking", "coding"]
}
"name": "John Doe",
"age": 30,
"isActive": true,
"address": {
"street": "123 Main St",
"city": "New York"
},
"hobbies": ["reading", "hiking", "coding"]
}
获取所有内容(美化输出):
jq '.' data.json
获取特定字段:
实例
jq '.name' data.json
# 输出:"John Doe"
# 输出:"John Doe"
获取嵌套字段:
实例
jq '.address.city' data.json
# 输出:"New York"
# 输出:"New York"
2. 数组操作
获取数组元素:
实例
jq '.hobbies[0]' data.json
# 输出:"reading"
jq '.hobbies[1:3]' data.json
# 输出:["hiking", "coding"]
# 输出:"reading"
jq '.hobbies[1:3]' data.json
# 输出:["hiking", "coding"]
数组长度:
实例
jq '.hobbies | length' data.json
# 输出:3
# 输出:3
3. 条件过滤
筛选满足条件的元素:
实例
# 假设有 users.json 包含用户数组
jq '.[] | select(.age > 25)' users.json
jq '.[] | select(.age > 25)' users.json
4. 数据转换
创建新对象:
实例
jq '{fullName: .name, city: .address.city}' data.json
# 输出:{"fullName": "John Doe", "city": "New York"}
# 输出:{"fullName": "John Doe", "city": "New York"}
数学运算:
实例
jq '.age * 2' data.json
# 输出:60
# 输出:60
5. 处理多个文件
jq -s '.[0] + .[1]' file1.json file2.json
高级用法
1. 使用变量
jq --arg new_city "Boston" '.address.city = $new_city' data.json
2. 处理 API 响应
curl -s https://api.example.com/users | jq '.[] | {name: .name, email: .email}'
3. 复杂数据转换
实例
# 将对象数组转换为 CSV 格式
jq -r '["Name", "Age"], (.[] | [.name, .age]) | @csv' users.json
jq -r '["Name", "Age"], (.[] | [.name, .age]) | @csv' users.json
4. 错误处理
实例
# 使用 try-catch 处理可能不存在的字段
jq 'try .unknown_field catch "default value"' data.json
jq 'try .unknown_field catch "default value"' data.json
浙公网安备 33010602011771号