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