这是一个非常基本的(可能是愚蠢的)问题,但我无法让它发挥作用......
我有一个带有这种结构的json文件
{
"data": {
"what a burger": [1,2,3],
"wap": [66],
"the map": [11,20],
"H. Incandenza": [1,1],
"What a burger": [a,a,3]
}
}
我想提取
[1,2,3],[α,α,3]
我的猜测就像是
jq '.data | match("what a burger";"i")'
但这会导致
jq: error (at <stdin>:9): object ({"what a bu...) cannot be matched, as it is not a string
干杯。
答案 0 :(得分:7)
您的语句不起作用,因为您尝试将数据对象提供给匹配,但匹配只能用于字符串。
以下表达式可以满足您的需求。 to_entries
将对象转换为键和值数组。然后,我们使用map
和select
遍历此数组,其中.key
(现在是一个字符串)的所有条目都有match
。最后,我们只打印出每个元素的值。
.data | to_entries | map(select(.key | match("what a burger";"i"))) | map(.value)
然而,有两条评论:
[a,a,3]
,因为a
不是数字。jq
只会输出其中一个元素。答案 1 :(得分:7)
这是一个稍微简短的选择:
.data | with_entries(select(.key|match("what a burger";"i")))[]
在纠正输入并使用jq的-c选项后,这将产生两行:
[1,2,3]
["a","a",3]