json - 如何使用 jq 通配符

标签 json key wildcard jq

我有以下 json :

{  
   "details":{  
      "car": "bmw",
      "addresses":{  
         "ext-118-21-8-0-29":[  
            {  
               "version":4,
               "addr":"89 Psr"
            },
            {  
               "version":6,
               "addr":"56 apT"
            }
         ]
      }
   }
}

key ext-118-21-8-0-29是动态的,下次会改变,我不知道确切的值,这就是为什么我需要使用通配符。我需要获取 key 的值 addr其中版本是 4 .

我期望作为输出 89 Psr
我使用函数 startswith() 尝试了以下操作.
jq '.detail.addresses | select(startswith("ext"))'

但它以错误结束。

jq: error (at :0): startswith() requires string inputs

最佳答案

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

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

另一方面,如果您想选择版本为 4 的 key ,您可以使用 to_entries去做这个:
.details.addresses | to_entries[] | select(any(.value[]; .version == 4)).key

关于json - 如何使用 jq 通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56355822/

相关文章:

json - 使用 jq,将对象数组转换为具有命名键的对象

MySQL 没有在带有 "IN"的子选择的外部查询上使用键

java - Java中的通用集合和通配符

关于通配符的 Java 语言规范

ios - 在 Swift 中使用 Alamofire 处理 JSON 响应

javascript - 通过nodejs过滤对象数组

javascript - 在 ASP.NET MVC 中使用 jQuery 数据表时如何更新模型数据

sql-server - 警告!最大 key 长度为 900 字节。索引的最大长度为 1000 字节

具有下界(超)类型的 Java 方法

jquery - 返回 Json 会导致 asp.net mvc 中的保存文件对话框