json - 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
是动态的,下次它会改变,我不知道确切的值,这就是我需要使用通配符的原因。我需要获取addr
version 所在的键的值4
。
我期待作为输出89 Psr
我使用该功能尝试了以下操作startswith()
。
jq '.detail.addresses | select(startswith("ext"))'
但它以错误结束。
jq:错误(在:0):startswith()需要字符串输入
解决方案
如果您不关心您正在搜索的对象中的键,您可以只搜索对象的值,[]
然后您可以使用它过滤到您想要的结果。
.details.addresses[][] | select(.version == 4).addr
另一方面,如果您想选择具有版本 4 的键,则可以使用to_entries
以下方法:
.details.addresses | to_entries[] | select(any(.value[]; .version == 4)).key
推荐阅读
- python-3.x - 为什么 ipython 在装饰交互时返回 NameError?
- c - 我的 16 位实模式 DOS 的数字打印功能中的字符串损坏
- networking - docker-compose.yml,network 必须是映射,而不是数组
- tensorflow - tensorflow 中的 tf.function 是否优化了运行时间?
- r - 如何根据另一列查找一列的总和并将其放入R中的新数据框中
- count - SAS:变量计数
- api - Flask 分配公共 IP
- mysql - 关联子查询SQL的执行顺序是什么?
- gnupg - gpg: SMART : ignoré : Pas de clef publique gpg: [stdin]: encryption failed: Pas de clef publique 密码加密中止
- javascript - 如何使用rest在构造函数中赋值