JSONPath 按对象中的值过滤 属性

JSONPath filter property by value in object

如何使用 JSON 路径过滤功能来查询子对象(没有数组)上 属性 的特定条件?

考虑这个 JSON 示例:

{
  "queue": {
    "size": 13
  }
}

如果 .queue.size 大于 0,我想得到一个匹配项,如果它等于 0,则没有匹配项。 我尝试使用以下查询,但它不起作用:$.queue[?(@.size>0)]。我不清楚为什么在这个例子中 $.queue[size] 确实可以正确返回值 13,但是如果我包含过滤语法,我永远不会得到匹配。

JSONPath 表达式似乎只适用于数组。参见 here and here。您的查询 $.queue[?(@.size>0)] 适用于:

{
  "queue": [{
    "size": 13
  },
  {
    "size": 10
  }]
}

一个小技巧可以是:

$..queue[?(@.size>0)]

唯一的缺点是,如果符合条件,它将更改子树中的每个对象。不仅在第一级。