Java JsonPath:将嵌套的json对象提取为字符串

时间:2018-08-29 13:06:47

标签: java json jsonpath

我需要获取一个json字符串,该字符串是较大json的一部分。 作为简化示例,我只想提取file01,并且需要将json对象作为字符串。

{
    "file01": {
        "id": "0001"
    },
    "file02": {
        "id": "0002"
    }
}

因此,在代码中类似:

String file01 = JsonPath.parse(jsonFile).read("$.file01").toJson();
System.out.println(file01);  // {"id":"0001"}

我想使用库JsonPath,但是我不知道如何获得所需的东西。

感谢您的帮助。 谢谢!

2 个答案:

答案 0 :(得分:2)

JsonPath中的默认解析器将所有内容读取为LinkedHashMap,因此read()的输出将为Map。您可以使用诸如Jackson或Gson之类的库将此Map序列化为JSON字符串。但是,您也可以在内部使用JsonPath为您执行此操作。

要在JsonPath中执行此操作,请为JsonPath配置AbstractJsonProvider的另一种实现,该实现允许您将解析的结果作为JSON进行使用。在以下示例中,我们使用GsonJsonProvider,而read()方法的输出是一个JSON字符串。

@Test
public void canParseToJson() {
    String json = "{\n" +
            "    \"file01\": {\n" +
            "        \"id\": \"0001\"\n" +
            "    },\n" +
            "    \"file02\": {\n" +
            "        \"id\": \"0002\"\n" +
            "    }\n" +
            "}";

    Configuration conf = Configuration.builder().jsonProvider(new GsonJsonProvider()).build();

    JsonObject file01 = JsonPath.using(conf).parse(json).read("$.file01");

    // prints out {"id":"0001"}
    System.out.println(file01);
}

答案 1 :(得分:0)

这是可行的解决方案!

public static void main(String[] args) throws FileNotFoundException, IOException, ParseException {
JSONParser parser = new JSONParser();
Object obj = parser.parse(new FileReader("yourjson.json"));

Object res = JsonPath.read(obj, "$"); //your json path extract expression by denoting $

System.out.println(res);}