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
    评论
下面是一个简单的 JSON 数据: ```json { "name": "John", "age": 30, "cars": [ { "name": "Ford", "models": [ "Fiesta", "Focus", "Mustang" ] }, { "name": "BMW", "models": [ "320", "X3", "X5" ] }, { "name": "Fiat", "models": [ "500", "Panda" ] } ] } ``` 我们使用 JSONPath 来获取数据: 1. 导入相关的依赖包: ```xml <dependency> <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path</artifactId> <version>2.4.0</version> </dependency> ``` 2. 使用 JSONPath 获取数据: ```java import com.jayway.jsonpath.JsonPath; import java.util.List; public class JsonPathExample { public static void main(String[] args) { String json = "{ \"name\": \"John\", \"age\": 30, \"cars\": [ { \"name\": \"Ford\", \"models\": [ \"Fiesta\", \"Focus\", \"Mustang\" ] }, { \"name\": \"BMW\", \"models\": [ \"320\", \"X3\", \"X5\" ] }, { \"name\": \"Fiat\", \"models\": [ \"500\", \"Panda\" ] } ] }"; String name = JsonPath.read(json, "$.name"); int age = JsonPath.read(json, "$.age"); List<String> models = JsonPath.read(json, "$.cars[?(@.name=='BMW')].models"); System.out.println("Name: " + name); System.out.println("Age: " + age); System.out.println("BMW models: " + models); } } ``` 输出结果如下: ``` Name: John Age: 30 BMW models: [320, X3, X5] ``` 以上示例演示了如何使用 JSONPath 获取 JSON 数据的某些字段。更多 JSONPath 的语法和使用方法可以参考官方文档:[https://github.com/json-path/JsonPath](https://github.com/json-path/JsonPath)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值