You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用JsonPath获取过滤后数组的长度?是否可行?

用JsonPath获取过滤后数组的长度当然可行!

你的思路完全没问题,但原表达式有个小语法问题,咱们来修正下,同时针对不同的JsonPath实现给你对应写法:

首先先明确你的目标JSON数据:

{ 
  "issues": [ 
    { "severity": "MAJOR" }, 
    { "severity": "MINOR" }, 
    { "severity": "MAJOR" }, 
    { "severity": "MAJOR" }, 
    { "severity": "MAJOR" } 
  ] 
}

常见的正确写法(以Jayway JsonPath为例,Java生态最常用)

Jayway是目前应用最广的JsonPath实现,它支持直接在过滤后的数组上调用size()length()来获取长度:

  • 直接链式调用
    $.issues[?(@.severity == 'MAJOR')].size()
    
  • 通过根节点计算长度
    $[length($.issues[?(@.severity == 'MAJOR')])]
    

这两个表达式针对你的JSON都会返回4,正好对应4个severityMAJOR的条目。

你原表达式的问题

你写的$.issues.[?(@.severity == 'MAJOR')].length()里,$.issues后面多了一个不必要的点,去掉这个点后,再根据所用的JsonPath实现替换正确的长度方法(比如Jayway用size()更稳妥,部分实现也支持length())就可以正常工作了。

原始JsonPath规范的说明

如果是遵循Goessner原始JsonPath规范的实现,本身没有内置的长度函数,这种情况下你需要先通过$.issues[?(@.severity == 'MAJOR')]获取过滤后的数组,再在你的代码逻辑里去读取这个数组的长度值。

内容的提问来源于stack exchange,提问作者Matthis.h

火山引擎 最新活动