我正在尝试过滤从Azure CLI中获得的普通列表,并且正在努力构建一个可以正确过滤列表的查询。封装我要完成的工作的示例将尝试过滤列表[1, 2, 3, 4, 5]
并尝试使所有大于2的值。
使用jq,我可以这样做:echo "[1, 2, 3, 4, 5]" | jq "map(select(. > 2))"
赋予[3, 4, 5 ]
。据我所知,麻烦来自无法在JMESPath中指示“当前元素”,而没有特定的键可以引用。
我该如何使用JMESPath查询来过滤像这样的简单列表?
答案 0 :(得分:0)
这可以通过使用当前节点标记@
作为过滤器表达式的一部分来完成。需要注意的是,您必须在JMESPath中使用反引号括起来的文字。否则,将导致表达式无效。这是从数组中获取大于2的所有数字的过滤器:
[?@ > `2`]
对于数字以外的对象数组,可以使用过滤器表达式中的任何built in functions以及当前节点标记@
进行过滤。这将使您包含substring
的所有字符串:
[?contains(@, `substring`)]