Json 如何使用jq通配符

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,

我有以下json:

{  
   "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