按属性过滤对象并使用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

]可行,也只是属性值的数组,但我也需要键(ac)。有什么办法可以在jmespath中做到这一点?

这都是可笑剧本的一部分,因此肯定会有一种以其他方式实现选择的方法(Jinja2模板或自定义插件),但是我想尝试jmespath并认为,它应该能够执行此任务。

回答:

抱歉,但是AFAIK在本机JMESPath中是不可能的。

为此,to_entries在jq等不同的工具中都有自定义的内置函数。

对于jmespath.py从而为Ansible有挂拉的要求落实键操作。

我已经制作了json_query过滤器的补丁版本。

有关其他信息,请参见此答案。

以上是 按属性过滤对象并使用jmespath中的键进行选择 的全部内容, 来源链接: utcz.com/qa/402413.html

回到顶部