首页 > 解决方案 > jq通配符的使用方法

问题描述

我有以下 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是动态的,下次它会改变,我不知道确切的值,这就是我需要使用通配符的原因。我需要获取addrversion 所在的键的值4

我期待作为输出89 Psr

我使用该功能尝试了以下操作startswith()

jq '.detail.addresses | select(startswith("ext"))'

但它以错误结束。

jq:错误(在:0):startswith()需要字符串输入

标签: jsonselectkeyjqwildcard

解决方案


如果您不关心您正在搜索的对象中的键,您可以只搜索对象的值,[]然后您可以使用它过滤到您想要的结果。

.details.addresses[][] | select(.version == 4).addr

另一方面,如果您想选择具有版本 4 的键,则可以使用to_entries以下方法:

.details.addresses | to_entries[] | select(any(.value[]; .version == 4)).key

推荐阅读