4

我正在努力寻找一种方法来根据另一个表达式而不是字符串或数字来过滤节点。我查看了JSONPathJMESPath的规范,并找到了一些关于无法按照我一直在尝试的方式执行此操作的信息。

JSON路径

"使用 JSONPath 方括号对前一个路径片段寻址的对象或数组进行操作。索引始终从 0 开始"

我发现 JSONPath plus 有一个 @parent 属性,但它似乎只上升到直接父级,我需要从根访问(或向上工作)

JMESPath

规格似乎表明过滤器应该是expression compare expression,但我无法让它工作。有一个半相关的问题和关于current_node的注释,尽管我有点不清楚。

一天结束时,我正在努力实现这一目标:

数据

{ 
  level: 20,
  items: [{
    qty: 20,
    id: '123'
  }, {
    qty: 30,
    id: '234'
 }]
}

表达:

$.items[?(@.qty==$.level)]

期望

获取所有qty匹配的项目level

关于实现这一目标的建议?我正在考虑为自己扩展 JSONPath 实现,因为这似乎是唯一的方法。我不熟悉我刚刚发现的 JMESPath,所以也许实际上有一种方法可以做到这一点。

4

1 回答 1

2

好吧,JSONPath 的出色作者加上了@root 功能。

所以现在:

$.items[?(@.qty==@root.level)] // Could use @parent.level for shallow stuff too
于 2019-10-13T02:29:27.347 回答