一尘不染

按属性过滤对象并使用jmespath中的键进行选择

json

我正在尝试根据子属性的值来过滤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并认为,它应该能够执行此任务。


阅读 372

收藏
2020-07-27

共1个答案

一尘不染

抱歉,但是AFAIK在本机JMESPath中是不可能的。
为此,to_entriesjq等不同的工具中都有自定义的内置函数。
对于jmespath.py从而为Ansible有挂拉的要求落实键操作。

更新:
我已经制作了json_query过滤器的补丁版本。
有关其他信息,请参见此答案。

2020-07-27