使用 jsonpath 表达式的数组大小 - Stefan Goessner JsonPath

问题描述 投票:0回答:5

我在使用 Stefan Goessner 的 JsonPath 查找数组或列表大小时遇到问题。我使用的是 json-path-2.0.0 版本。

我的 jsonpath 表达式是

$.orders.length
并且 JSON 看起来像这样:

{
  "orders" : [
    ...
  ]
}

它失败并出现以下错误:

com.jayway.jsonpath.PathNotFoundException: Property ['length'] not found in path $['orders']

我也尝试过

$.orders.length()
,但再次失败并出现以下错误:

com.jayway.jsonpath.PathNotFoundException: Property ['length()'] not found in path $['orders']

请建议我如何使用 Goessner 的 JsonPath 表达式获取数组的长度。

[编辑] 以下是我获取配置的方式:

    com.jayway.jsonpath.Configuration conf = com.jayway.jsonpath.Configuration.defaultConfiguration().addOptions(Option.DEFAULT_PATH_LEAF_TO_NULL);
    DocumentContext documentContext = JsonPath.using(conf).parse(orderJson);
    Object val = documentContext.read(jsonPathExpression);
java arrays json size jsonpath
5个回答
84
投票

似乎仅在 jayway json-path 库的 2.1.0 版本中

添加了对返回数组 
length() 的支持。

根据一些快速测试,

$.orders.length()

表达式似乎适用于版本 2.1.0 和版本 2.2.0,因此我认为您只需要升级依赖项版本即可修复您所看到的错误。


3
投票

webclientspring webflux

.... .jsonPath("$.length()").isEqualTo(2); ...
    

0
投票
统计json数组元素个数的方法 这就是我解决它的方法

myJson

 ->我的Json,里面存在一个数组

fieldPath

 -> 数组的路径

import com.jayway.jsonpath.JsonPath; import org.json.JSONArray; import org.json.simple.JSONObject; JSONObject myJson; public long CountFields(String fieldPath) { String onlyMyArray=JsonPath.parse(myJson).read(fieldPath).toString(); JSONArray jsonArray = new JSONArray(onlyMyArray); return jsonArray.length(); }
    

-2
投票
JsonPath js = new JsonPath(response); List values = js.getList("Mention the path of the json here"); int size= values.size(); System.out.println(size);
    

-5
投票
JsonPath 的 getList() 方法可以有效地将数组转换为对象列表,然后可以与 .size() 一起使用

List orderItems = someResponse.jsonPath().getList("orders"); // each element in the Json array is now an element in the orderItems list int orderCount = orderItems.size()); // So now because we have the size of the list, we have the size of the original array
    
© www.soinside.com 2019 - 2024. All rights reserved.