Json 如何使用jq通配符
我有以下json:Json 如何使用jq通配符,json,key,wildcard,jq,Json,Key,Wildcard,Jq,我有以下json: { "details":{ "car": "bmw", "addresses":{ "ext-118-21-8-0-29":[ { "version":4, "addr":"89 Psr" }, { "version":6,
{
"details":{
"car": "bmw",
"addresses":{
"ext-118-21-8-0-29":[
{
"version":4,
"addr":"89 Psr"
},
{
"version":6,
"addr":"56 apT"
}
]
}
}
}
键ext-118-21-8-0-29
是动态的,下次会更改,我不知道确切值,这就是我需要使用通配符的原因。我需要获取键addr
的值,其中版本为4
我期望作为输出89 Psr
我使用函数startswith()
尝试了以下操作
但它以一个错误结束
jq:错误(位于:0):startswith()需要字符串输入
如果您不关心正在搜索的对象中的键,则可以使用
[]
搜索对象的值,然后过滤到所需的结果
.details.addresses[][] | select(.version == 4).addr
另一方面,如果您想选择具有版本4的键,可以使用来搜索条目
来执行此操作:
.details.addresses | to_entries[] | select(any(.value[]; .version == 4)).key
如部分问题所述,如果您希望将搜索限制在以“ext”开头的关键字名称上: 在允许范围的另一端:
.details.addresses
| ..
| objects
| select(.version==4)
| .addr
我有一个问题,代码保留了双引号
“
,我有“89 Psr”
,因此添加-r
开关以获得原始输出。
.details.addresses
| to_entries[]
| select(.key|startswith("ext"))
| .value[]
| select(.version == 4)
| .addr
.details.addresses
| ..
| objects
| select(.version==4)
| .addr