点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!
简介
注意:jq不是曾经流行的JS库Jquery的缩写。
用法
jq [options] [filter] [file]
options: 可选参数,用于指定 jq 的选项。 filter: 必需参数,用于指定 JSON 数据的查询和转换操作。 file: 可选参数,要处理的 JSON 数据文件。
-r: 输出原始格式,而不是 JSON 编码。 -c: 输出时将结果按行分隔。 -s: 将输入视为多个 JSON 对象,用于处理多个 JSON 对象的数组。
.: 表示当前对象,用于访问字段或属性。 .fieldName: 选择指定字段的值。 []: 用于遍历数组元素。 select(condition): 根据条件选择元素。 map(transform): 对数组中的每个元素应用转换操作。
示例
3.1 数据格式化
echo '{"name": "John", "age": 30, "city": "New York"}' | jq .
{
"name": "John",
"age": 30,
"city": "New York"
}
3.2 选择特定字段
查询姓名。
echo '{"name": "John", "age": 30, "city": "New York"}' | jq .name
"John"
3.3 使用通配符过滤
查询people列表里的所有姓名。
echo '{"people": [{"name": "John", "age": 30}, {"name": "Alice", "age": 25}]}' | jq .people[].name
"John"
"Alice"
3.4 条件筛选
打印31岁以上人员的信息。
echo '[{"name": "John", "age": 30, "city": "New York"},
{"name": "Peter", "age": 32, "city": "Chicago"}]' | jq '.[] | select(.age > 31) '
{
"name": "Peter",
"age": 32,
"city": "Chicago"
}
3.5 数组操作
将数组中的每个元素乘以2并打印。
echo '[1, 2, 3, 4, 5]' | jq '.[] | . * 2'
2
4
6
8
10
3.6 字符串拼接
将名字和城市拼接在一起。
echo '{"name": "John", "age": 30, "city":
"New York"}' | jq '"Name: \(.name), City: \(.city)"'
"Name: John, City: New York"
3.7 计算数组长度
echo '[1, 2, 3, 4, 5]' | jq 'length'
5
3.8 返回所有键值
echo '{"name": "John", "age": 30, "city": "New York"}' | jq 'keys'
["name","age","city"]
3.9 比较并返回布尔值
比较John的年龄是否比Peter大。
echo '[{"name": "John", "age": 30, "city": "New York"},
{"name": "Peter", "age": 32, "city": "Chicago"}]
' | jq '(.[] | select(.name == "John").age) > (.[] | select(.name == "Peter").age)'
false
3.10 返回数组中的最大值和最小值
返回人员里边的最大值和最小值。
echo '[{"name": "John", "age": 30, "city": "New York"},{"name": "Peter",
"age": 32, "city": "Chicago"},{"name": "Alice", "age": 28, "city": "Los
Angeles"},{"name": "Bob", "age": 35, "city": "Miami"}]' | jq 'max_by(.age) as
$max | min_by(.age) as $min | [$max.name, $max.age, $min.name, $min.age]'
[
"Bob",
35,
"Alice",
28
]
3.11 将数组元素进行排序
按照由年龄由大到小顺序返回人员及年龄列表。
echo '[{"name": "John", "age": 30, "city": "New York"},
{"name": "Peter", "age": 32, "city": "Chicago"},
{"name": "Alice", "age": 28, "city": "Los Angeles"},
{"name": "Bob", "age": 35, "city": "Miami"}]' | jq 'sort_by(.age) | reverse | .[] | [.name, .age]'
[
"Bob",
35
]
[
"Peter",
32
]
[
"John",
30
]
[
"Alice",
28
]
3.12 将数组转为逗号分隔的字符串
echo '[1, 2, 3, 4, 5]' | jq -r 'join(",")'
1,2,3,4,5
3.13 提取数组中的某个范围的元素
echo '[1, 2, 3, 4, 5]' | jq '.[1:4]'
[2,3,4]
3.14 合并两个对象
echo '{"name": "John", "age": 30}' | jq '. + {"city": "New York"}'
{
"name": "John",
"age": 30,
"city": "New York"
}
3.15 提取人员列表中年龄在特定范围内的人员信息
echo '[{"name": "John", "age": 30, "city": "New York"},
{"name": "Peter", "age": 32, "city": "Chicago"},
{"name": "Alice", "age": 28, "city": "Los Angeles"},
{"name": "Bob", "age": 35, "city": "Miami"}]' | jq 'map(select(.age >= 30 and .age <= 35))'
[
{
"name": "John",
"age": 30,
"city": "New York"
},
{
"name": "Peter",
"age": 32,
"city": "Chicago"
},
{
"name": "Bob",
"age": 35,
"city": "Miami"
}
]
3.16 提取人员列表中城市为特定值的人员姓名
echo '[{"name": "John", "age": 30, "city": "New York"},
{"name": "Peter", "age": 32, "city": "Chicago"},
{"name": "Alice", "age": 28, "city": "Los Angeles"},
{"name": "Bob", "age": 35, "city": "Miami"}]' | jq 'map(select(.city == "Chicago")) | .[].name'
"Peter"

本文作者:王经纬(上海新炬中北团队)
本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




