我需要使用非确定路径从json路径获取原始数据类型

时间:2018-02-01 15:07:35

标签: json jsonpath jpath

鉴于此文件:

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

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

1 个答案:

答案 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);