根节点为无名数组时如何使用JsonPath的length()获取数组长度
获取JsonPath顶层无外层键数组的长度
$.length()和$.*.length()不生效的原因很简单:当根节点本身就是数组时,$.后接方法或属性会被解析为遍历根下所有子元素,逐个计算每个子元素的长度,根本不会作用到根节点本身,自然拿不到你要的顶层数组长度。
根据你使用的JsonPath实现不同,选对应写法即可:
- 如果你用的是Jayway JsonPath(Java生态主流实现、大部分后端JsonPath依赖、多数在线JsonPath调试工具的默认引擎):直接写
length($)就行。这个写法明确把根节点$作为length函数的入参,不会触发子元素遍历,直接返回顶层数组的元素总数。
拿你给出的结构测试,包含2个对象的顶层数组执行该路径会直接返回数值2,和你之前取嵌套数组长度的效果完全一致。 - 如果你用的是JS生态的Goessner系JsonPath实现(前端常用的jsonpath、jsonpath-plus库):写
$.length就可以,注意不要加函数括号,这类实现里length是数组节点的自带属性,不需要通过函数调用读取。 - 要是你用的是不支持函数传参的老旧JsonPath版本,可以用兼容写法曲线实现:通过
$[(@.length-1)]拿到数组最后一个元素的索引,结果加1就是数组总长度,这个写法几乎适配所有版本的JsonPath。
内容的提问来源于stack exchange,提问作者Vlad Vlad
相关产品推荐
相关产品推荐

