【发布时间】:2017-05-25 13:51:11
【问题描述】:
我正在尝试根据子属性的值过滤 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 中实现这一点?
这都是 ansible playbook 的一部分,所以肯定有一种方法可以以不同的方式(Jinja2 模板或自定义插件)实现选择,但我想尝试 jmespath 并认为它应该能够做到这样一个任务。
【问题讨论】:
-
除了查询任何内容之外,您还想根据嵌套数据删除某些键。像this question for Perl 这样的东西。我也想知道你是否可以使用 JMESPath 来做到这一点。
标签: json ansible normalization jmespath