我在使用 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);
似乎仅在 jayway json-path 库的 2.1.0 版本中
添加了对返回数组
length()
的支持。
根据一些快速测试,$.orders.length()
表达式似乎适用于版本 2.1.0 和版本 2.2.0,因此我认为您只需要升级依赖项版本即可修复您所看到的错误。
webclient 在 spring webflux
....
.jsonPath("$.length()").isEqualTo(2);
...
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();
}
JsonPath js = new JsonPath(response);
List values = js.getList("Mention the path of the json here");
int size= values.size();
System.out.println(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