在 JMESpath 中链接过滤器

Chaining filters in JMESpath

我希望能够使用 JMESpath 将多个过滤器链接在一起,但您似乎无法对过滤器的输出进行过滤。

我的工作示例如下:

// document:
{
  pips: {
    ancestors:[{
      id: 'p01234567'
    }],
    episode: {
      more: 'data',
      goes: 'here
    }
  }
}
// working filter: `[pips][?ancestors[?pid=='p01234567'] && episode]`

但我想改为如下编写我的过滤器,以有效地过滤另一个过滤器的输出:

[pips][?ancestors[?pid=='p01234567']][?episode]

知道为什么这不起作用吗?

我正在使用以下 NPM 包在 NodeJS 中构建它:https://www.npmjs.com/package/jmespath 我使用的语法是否有错误,我使用的库中是否存在错误,或者我只是想做一些超出 JMESpath 允许范围的事情?

谢谢!

我找到了原因 - 投影分两步计算,left-hand-side 创建一个 JSON 初始值数组,right-hand-side 是表达式。

解决方案:“管道表达式”允许您“对投影结果进行操作”。

因此,而不是之前的错误表达式:[pips][?ancestors[?pid=='p01234567']][?episode]

这应该写成:[pips][?ancestors[?pid=='p01234567']] | [?episode]

并且要撤消初始文档到数组的转换,我们可以将其转换回这样的对象:[pips][?ancestors[?pid=='p01234567']] | [?episode] | [0]

附带说明一下,我观察到使用圆括号 () 也有效,但使用管道更简洁。