JsonPath参照XPath解析xml的方式来解析Json
JsonPath用符号$表示最外层对象,类似于Xpath中的根元素
JsonPath可以通过点语法来检索数据,如: shell $.store.book[0].title
也可以使用中括号[]的形式,如 shell $[‘store’][‘book’][0][‘title’]
{
"lemon": {
"teachers": [
{
"id": "101",
"name": "华华",
"addr": "湖南长沙",
"age": 25
},
{
"id": "102",
"name": "韬哥",
"age": 28
},
{
"id": "103",
"name": "Happy",
"addr": "广东深圳",
"age": 16
},
{
"id": "104",
"name": "歪歪",
"addr": "广东广州",
"age": 29
}
],
"salesmans": [
{
"id": "105",
"name": "毛毛",
"age": 17
},
{
"id": "106",
"name": "大树",
"age": 27
}
]
},
"avg": 25
}
在pom.xml中添加maven以来
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.3.0</version>
</dependency>
因为每次读取都会解析json字符串,可以采用如下方法解析并读取json字符串
Object document=Configuration.defaultConfiguration().jsonProvider().parse(json);
obj=JsonPath.read(json, "$..addr");
System.out.println(obj);
在java使用JsonPath的时候,JsonPath读取解析后会将返回值自动转型到指定的类型, 所以需要首先明确期望结果是什么类型,否则会出现转换异常
//Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.util.List
List<String> list = JsonPath.parse(jsonStr).read("$.lemon.teachers[0].name");
//正常转换
String teacher1 = JsonPath.parse(jsonStr).read("$.lemon.teachers[0].name");
同时jsonpath还提供一些简单对象的映射,如将一个时间戳读取解析为java.util.Date对象
String json = “{“date_as_long” : 1411455611975}”;
Date date = JsonPath.parse(json).read("$[‘date_as_long’]", Date.class);
也可以直接将jsonPath映射输出为pojo对象
新建pojo类User
public class User {
```java
private int id;
private String name;
private int age;
//省略getter、setter方法
String userJson = “{‘id’:1,‘name’:‘happy’,‘age’:25}”;
User user = JsonPath.parse(userJson).read("$",User.class);
System.out.println(user);