我需要获取一个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,但是我不知道如何获得所需的东西。
感谢您的帮助。 谢谢!
答案 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);}