man*_*anu 10 regex json key match jq
这是一个非常基本的(可能是愚蠢的)问题,但我无法让它发挥作用......
我有一个这种结构的json文件
{
"data": {
"what a burger": [1,2,3],
"wap": [66],
"the map": [11,20],
"H. Incandenza": [1,1],
"What a burger": [a,a,3]
}
}
Run Code Online (Sandbox Code Playgroud)
我想提取"name"与某个模式匹配的数据中的字段值.例如,我想提取所有不区分大小写的"汉堡"的巧合
[1,2,3],[α,α,3]
我的猜测是这样的
jq '.data | match("what a burger";"i")'
Run Code Online (Sandbox Code Playgroud)
但这会导致
jq: error (at <stdin>:9): object ({"what a bu...) cannot be matched, as it is not a string
Run Code Online (Sandbox Code Playgroud)
干杯.
您的语句不起作用,因为您尝试将数据对象提供给匹配,但匹配只能用于字符串.
以下表达式将执行您想要的操作.在to_entries
将对象转换为键和值的阵列.然后我们通过使用map
和(现在是一个字符串)具有的select
所有条目迭代这个数组.最后,我们只打印出每个元素的值..key
match
.data | to_entries | map(select(.key | match("what a burger";"i"))) | map(.value)
Run Code Online (Sandbox Code Playgroud)
但是,两条评论:
[a,a,3]
不JSON不允许的,因为a
不是一个数字.jq
只会输出其中一个元素.这是一个稍微简短的替代方案:
.data | with_entries(select(.key|match("what a burger";"i")))[]
Run Code Online (Sandbox Code Playgroud)
在纠正输入并使用jq的-c选项后,这将生成两行:
[1,2,3]
["a","a",3]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11905 次 |
最近记录: |