按属性过滤对象并使用jmespath中的键进行选择
我正在尝试根据子属性的值来过滤jmespath中对象的属性,并且只想包括那些将子属性设置为特定值的属性。
根据此示例数据:
{ "a": {
"feature": {
"enabled": true,
}
},
"b": {
},
"c": {
"feature": {
"enabled": false
}
}
}
我想要一个具有启用该功能的所有属性的对象。
{ "a": {
"feature": {
"enabled": true,
}
}
}
我想我可以使用此jmespath查询来过滤property. enabled
设置为true 的对象。不幸的是,它似乎不起作用,而是返回一个空数组。
*[?feature.enabled==`true`]
*.feature.enabled
或*[feature.enabled]
只返回布尔值而没有任何上下文。
即使*[?feature.enabled==
true
]
可行,也只是属性值的数组,但我也需要键(a
和c
)。有什么办法可以在jmespath中做到这一点?
这都是可笑剧本的一部分,因此肯定会有一种以其他方式实现选择的方法(Jinja2模板或自定义插件),但是我想尝试jmespath并认为,它应该能够执行此任务。
回答:
抱歉,但是AFAIK在本机JMESPath中是不可能的。
为此,to_entries
在jq等不同的工具中都有自定义的内置函数。
对于jmespath.py
从而为Ansible有挂拉的要求落实键操作。
我已经制作了json_query过滤器的补丁版本。
有关其他信息,请参见此答案。
以上是 按属性过滤对象并使用jmespath中的键进行选择 的全部内容, 来源链接: utcz.com/qa/402413.html