jq
是一个命令行工具,用于处理 JSON 数据。它允许你用命令行解析、过滤、映射和转换 JSON 结构。 以下是 jq
的一些常见用法及示例:
1.基础使用:最简单的用法是直接传递一个表达式给 jq
,以从JSON数据中提取信息。
•示例:如果你有一个名为 data.json
的文件包含 { "name": "John", "age": 30 }
,你可以使用 cat data.json | jq '.name'
来获取 "John"
。
2.访问嵌套对象:可以通过点符号访问嵌套的JSON对象。
•示例:对于JSON数据 { "person": { "name": "John", "age": 30 }}
,可以使用 .person.name
来获取 "John"
, echo '{ "person": { "name": "John", "age": 30 }}' | jq '.person.age'
3.数组操作:可以使用索引或特定的数组函数来操作JSON数组。
•示例:对于JSON数据 [{"name":"John"},{"name":"Jane"}]
,使用 .[] .name
可以分别获取 "John"
和 "Jane"
。 echo '[{"name":"John"},{"name":"Jane"}]' | jq '.[0] .name'
4.过滤与条件选择:使用条件表达式来筛选数据。
•示例:假设你有JSON数据 [{"name":"John","age":30},{"name":"Jane","age":25}]
,你可以通过 .[] | select(.age > 28)
获取年龄大于28的对象。
5.修改数据:使用算术运算符或字符串连接等操作来修改JSON中的值。
•示例:.age += 5
可以为每个对象的 age
值增加5。 echo '[{"name":"John","age":30},{"name":"Jane","age":25}]' | jq '.[] .age += 5'
6.格式化输出:默认情况下,jq
输出的是紧凑的JSON格式。要获得更易读的输出,可以添加 -C
参数以彩色打印或者 -M
参数禁用颜色并使用 . | debug
来查看原始输入。
•示例:jq . input.json
对比 jq -C . input.json
。 笔者做了个对比实验有如下发现:
cat一下看看
朋友们可以试试 -M
选项的效果。
7.组合多个操作:可以通过管道将多个操作结合起来。
•示例:命令 jq '.items[] | select(.type == "fruit") | .name'
可以从列表中选出类型为“fruit”的项,并返回它们的名字。 类似地 echo '[{"name":"John","age":30},{"name":"Jane","age":25}]' | jq '.[] | select(.age > 28) | .name'
8.读取外部变量:使用 --arg
或 --argjson
参数可以在命令中传入外部变量。
•示例: 命令jq --arg name "John" '.name = $name'
将设置JSON对象中的 name
字段为 "John"。