Linux笔记之命令行JSON处理器jq
code review!
文章目录
- Linux笔记之命令行JSON处理器jq
- 1.安装
- 2.jq 基本用法
- 3.例程
- 3.1. 示例JSON文件
- 3.2. 读取特定字段
- 3.3. 管道过滤器(Pipe Filters)
- 3.4. 映射过滤器(Map Filters)
- 3.5. 条件过滤器
- 3.6. 将输出格式化为字符串
- 3.7. 整合到Shell脚本中
1.安装
sudo apt-get install jq
2.jq 基本用法
jq
的基本语法是:
jq 'filter' file.json
其中 filter
是您用来提取或处理JSON文件中数据的表达式。
3.例程
3.1. 示例JSON文件
让我们创建一个简单的JSON文件 data.json
:
{
"name": "John",
"age": 30,
"children": [
{"name": "Alice", "age": 10},
{"name": "Bob", "age": 7}
]
}
3.2. 读取特定字段
提取上面JSON文件中的 name
字段:
jq '.name' data.json
输出将是:
"John"
3.3. 管道过滤器(Pipe Filters)
您可以使用管道 |
来连接多个操作,例如获取第一个孩子的名字:
jq '.children[0].name' data.json
输出将是:
"Alice"
3.4. 映射过滤器(Map Filters)
如果您想要获取所有孩子的名字,可以使用 map
函数:
jq '.children | map(.name)' data.json
输出将是一个JSON数组:
["Alice", "Bob"]
3.5. 条件过滤器
使用选择器 select
来找到年龄大于8岁的孩子:
jq '.children[] | select(.age > 8) | .name' data.json
输出将是:
"Alice"
3.6. 将输出格式化为字符串
如果您不希望输出带有引号,可以使用 -r
参数(即 raw output):
jq -r '.name' data.json
输出将是:
John
3.7. 整合到Shell脚本中
现在让我们将这些命令整合到一个简单的Shell脚本中,以自动化一些任务:
#!/bin/bash
# 读取JSON文件
FILE="data.json"
# 输出所有孩子的名字
echo "Children's names:"
jq -r '.children | map(.name) | join(", ")' $FILE
# 查找年龄大于8岁的孩子
echo "Children older than 8:"
jq -r '.children[] | select(.age > 8) | .name' $FILE
保存这个脚本为 process_json.sh
,然后给它执行权限并运行:
chmod +x process_json.sh
./process_json.sh