如何在 JSONPath 中应用过滤器和 select 最匹配

How to apply filter AND select top most matches in JSONPath

我想按某些表达式进行过滤,select 只有前五个与该表达式匹配。

http://goessner.net/articles/JsonPath/ 显示如何对值进行筛选:

$..book[?(@.price<10)]

以及如何仅过滤掉第一个匹配项:

$..book[:2]

但是如何将两者结合起来呢?我尝试了各种方法,但似乎找不到任何有效的方法。

在 jsonpath-plus 中,可以通过以下方式检索:

var result = JSONPath({json: sample, path: '$..book[?(@property <= 5 && @.price<10)]'});

这是因为@property这里是jsonpath-plus的自定义特性,用于获取当前对象属性,在本例中是数组索引。

JSFiddle

我认为最初的 JSONPath 规范虽然是一个良好的开端,但在某种程度上未明确规定,这就是为什么它得到增强并在 https://github.com/s3u/JSONPath 中得到更好记录的原因。但是,还有其他实现,至少在其他语言中是这样,因此在其他实现中如何完成(如果有的话)可能存在一些差异。

(免责声明:我参与了 jsonpath-plus 项目。)