javascript - 针对另一个表达式的 JSONPath 或 JMESPath 过滤

标签 javascript jsonpath jmespath

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

JSON路径

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

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

JMESPath

规范似乎表明过滤器应该是 expression compare expression但我无法让它工作。有一个半相关的issue以及关于 current_node 的注释虽然我有点不清楚。

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

资料

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

表达式:
$.items[?(@.qty==$.level)]

期待

使用 qty 获取所有项目匹配 level .

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

最佳答案

好吧 JSONPath plus 的出色作者立即添加了@root 功能。

所以现在:

$.items[?(@.qty==@root.level)] // Could use @parent.level for shallow stuff too

关于javascript - 针对另一个表达式的 JSONPath 或 JMESPath 过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58357011/

相关文章:

javascript - 如何在不先加载组件的情况下重定向主页?

javascript - 使用 jquery 重新排序 HTML 表中的列

javascript - 无法访问对象的 JSON 数组,让我抓狂

java - 从 Json 对象列表中获取字符串列表

amazon-web-services - AWS CLI 和 JMESPath 过滤并选择嵌套属性

ansible - 使用 Ansible 在嵌套 JMESPath 查询中保留 null

javascript - 在 Material Design 中调整 Google Columns 图表的列宽

JSON 从子对象获取父对象

spring - JsonPathRequestMatchers 到 ResultMatcher 使用 MockMVC

python-3.x - 如何使用 starts_with jmespath.search 字典键