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

时间:2019-01-17 17:30:38

标签: jmespath

我正在尝试过滤从Azure CLI中获得的普通列表,并且正在努力构建一个可以正确过滤列表的查询。封装我要完成的工作的示例将尝试过滤列表[1, 2, 3, 4, 5]并尝试使所有大于2的值。

使用jq,我可以这样做:echo "[1, 2, 3, 4, 5]" | jq "map(select(. > 2))"赋予[3, 4, 5 ]。据我所知,麻烦来自无法在JMESPath中指示“当前元素”,而没有特定的键可以引用。

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

1 个答案:

答案 0 :(得分:0)

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

[?@ > `2`]

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

[?contains(@, `substring`)]