You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JSONPath获取匹配testval为accept的数组最后元素的number值

问题:获取JSON数组中最后一个符合条件元素的指定属性值

原JSON结构

{
   "toplevel":  [
       {
           "testval": "accept",
           "number":  1
       },
       {
           "testval": "reject",
           "number": 2
       },
       {
           "testval": "accept",
           "number": 3
       },
       {
           "testval": "reject",
           "number": 4
       }
   ]
}

需求说明

需要从toplevel数组中,获取**最后一个testval属性值为"accept"**的元素的number属性值。目前用$.toplevel[?(@.testval == 'accept')].number能得到结果数组[1,3],但目标是单独获取值3,且只能使用纯JSONPath语法,不能后续处理查询结果或执行多次查询。

解决方案

方案1:反向遍历数组(兼容多数现代JSONPath实现)

利用数组切片将原数组反转,再找到第一个符合条件的元素(即原数组最后一个符合条件的元素),写法如下:

$.toplevel[::-1][?(@.testval == 'accept')][0].number

逻辑说明:[::-1]将toplevel数组反转,此时原数组的最后一个accept元素变成反转数组的第一个符合条件的元素,取索引0的number即可得到3。

方案2:条件判断排除后续符合条件的元素(标准JSONPath兼容)

通过条件判断,筛选出testval为accept且之后没有其他testval为accept的元素的项,写法如下:

$.toplevel[?(@.testval == 'accept' && !$..toplevel[(@.number + 1) to -1][?(@.testval == 'accept')])].number

逻辑说明:判断当前元素之后的所有元素中,不存在testval为accept的项,这样的元素就是原数组中最后一个符合条件的元素。

注意事项

部分老旧的JSONPath实现不支持数组切片([::-1])或复杂条件嵌套,此时优先选择方案2,或使用支持扩展语法的JSONPath库(如JSONPath Plus),这类库可以直接支持$.toplevel[?(@.testval == 'accept')][-1].number的写法(即你之前尝试的写法)。

内容的提问来源于stack exchange,提问作者David Ranney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 01:17:18