1

鉴于此文件:

{
    "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");

但我需要一个原始类型,仍然保持不定路径。

4

1 回答 1

1

根据文档

请注意,jsonPath 的返回值是一个数组,也是一个有效的 JSON 结构。因此,您可能希望再次将 jsonPath 应用于生成的结构,或者使用您最喜欢的数组方法之一对其进行排序。

注意:如果您使用的是 Java 实现,那么已经为此提出了一个问题,并且对该问题的响应重申了上述观点。

因此,只要您使用过滤器,您就需要两个调用,例如:

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);
于 2018-02-02T08:24:19.820 回答