java中JSONPATH的使用

什么是jsonpath

JsonPath参照XPath解析xml的方式来解析Json
JsonPath用符号$表示最外层对象,类似于Xpath中的根元素
JsonPath可以通过点语法来检索数据,如: shell $.store.book[0].title
也可以使用中括号[]的形式,如 shell $[‘store’][‘book’][0][‘title’]

运算符

在这里插入图片描述

JSON

{
    "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
}

json子例及说明

在这里插入图片描述

java对jsonpath的读取和解析

在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);

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值