使用 JMESPath 过滤一个简单的数组

Filter a simple array with JMESPath

我正在尝试筛选从 Azure CLI 获得的普通列表,并且正在努力构建一个正确筛选列表的查询。封装我要完成的事情的一个示例是尝试过滤列表 [1, 2, 3, 4, 5] 并尝试获取所有大于 2 的值。

使用 jq,我可以这样做:echo "[1, 2, 3, 4, 5]" | jq "map(select(. > 2))" 给出 [3, 4, 5 ]。据我所知,问题来自无法在 JMESPath 中指示 "current element",而没有特定的键来引用。

我将如何使用 JMESPath 查询过滤像这样的简单列表?

这可以使用当前节点标记 @ 作为过滤器表达式的一部分来完成。需要注意的是,您必须用反引号将 JMESPath 中的文字括起来。不这样做会导致表达式无效。这是从数组中获取所有大于 2 的数字的过滤器:

[?@ > `2`]

对于数字以外的对象数组,您可以使用过滤器表达式中的任何 built in functions 以及当前节点标记 @ 进行过滤。这将为您提供包含 substring:

的所有字符串
[?contains(@, `substring`)]