当前位置: 首页 > 面试题库 >

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

史俊德
2023-03-14
问题内容

我正在尝试根据子属性的值来过滤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过滤器的补丁版本。
有关其他信息,请参见此答案。



 类似资料:
  • 我正在寻找一个干净的方式来完成这一点使用Es6,所以扩展操作符对我可用。

  • 问题内容: 我试图在AngularJS中创建一个自定义过滤器,该过滤器将通过特定属性的值过滤对象列表。在这种情况下,我要按“极性”属性(“正”,“中性”,“负”的可能值)进行过滤。 这是我没有过滤器的工作代码: HTML: 这是JSON格式的“ $ scope.tweets”数组: 我可以提出的最佳过滤器如下: 此方法返回一个空数组。从“ console.log(polarity)”语句中不会打印

  • 问题内容: 如果我有一个对象数组,并且想将Angular模型绑定到基于过滤器的元素之一的属性,该怎么做?我可以用一个具体的例子更好地解释: HTML: 控制器: JSBin:http://jsbin.com/adisax/1/edit 我想将第二个输入过滤为具有’C’等级的主题,但是我不想将模型绑定到该 等级 ;我想将其绑定到等级为“ C”的主题的 标题 。 这可能吗?如果可以,怎么做? 问题答案

  • 问题内容: 好吧,标题说明了一切。我正在做的是创建一个特色产品模块。使用JSON填充尺寸的下拉列表,并且我使用把手来呈现html。我无法控制JSON文件。我尝试通过选项标签中的实际文本对选项值进行排序,但后来我意识到选项值是错误的。因此,现在我尝试按其值属性对选项进行排序,但尚未弄清楚。我正在尝试做这样的事情: 这是HTML: 问题答案: 在这里,您可以找到一个演示并将结果与​​原始结果进行比较:

  • 问题内容: 我有一个带有一系列对象属性的对象,这些对象属性具有以下相似的结构(这是从服务返回数据的方式): 当我执行ng-repeat时,我可以遍历所有这5个对象,例如: 但是, 我真正想要做的是仅对那些不是“ foo”类型的项进行迭代 ,即3次迭代而不是5次。我知道可以以某种方式利用过滤器来执行此操作,但是我不确定如何执行。我尝试了以下方法: 但这不起作用。实际上,即使执行以下操作以将对象限制为

  • 问题内容: 我喜欢使用jq过滤json文件: 给定json包含对象数组: 我想过滤该列表以仅显示ID值为2和4的元素,因此预期的输出为: 如何使用jq过滤json?我玩过select和map,但是没有任何一个可以使用,例如: 问题答案: 从文档: 输入项 输出量 我认为您可以执行以下操作: