鉴于此文件:
{
"slide": [{
"title": {
"fontName": "Open Sans",
"top": 188,
"left": -22,
"width": 597,
"fontSize": 45,
"valign": "bottom",
"presetType": "Parallelogram",
"fill": "#6bcad5",
"halign": "left",
"fontColor": "#f4dde6",
"height": 192
}
}, {
"picture": {
"top": 25,
"left": 54,
"width": 1,
"colorMode": "GRAYSCALE",
"presetType": "Snip_Same_Side_Rect",
"height": 1
}
}]
}
以下代码返回[54]
:
JSONArray obj = ctx.read("$.slide[?(@.picture)].picture.left");
但我需要一种原始类型,仍然保持不确定的路径。
答案 0 :(得分:1)
根据the docs:
请注意,jsonPath的返回值是一个数组,它也是一个有效的JSON结构。因此,您可能希望再次将jsonPath应用于生成的结构,或者使用您喜欢的数组方法之一进行排序。
注意:如果您正在使用Java实现,那么已经为此提出了issue,并且对该问题的响应重申了上述观点。
因此,只要您使用过滤器,就需要进行两次调用,例如:
String json = "...";
DocumentContext ctx = JsonPath.parse(json);
// capture the JSONArray
JSONArray obj = ctx.read("$.slide[?(@.picture)].picture.left");
// read the first value from the JSONArray
// prints "54"
System.out.println(obj.get(0));
// alternatively, push the JSON representation of the JSONArray back through JsonPath
Integer value = JsonPath.read(obj.toJSONString(), "$[0]");
// prints 54
System.out.println(value);