Java(27):Java JsonPath 解析JSON数据

Java JsonPath 解析JSON数据

简介:

JSONPath - 用于JSON的XPath,用来解析多层嵌套的json数据;是一种信息抽取类库,是从JSON文档中抽取指定信息的工具. JsonPath有许多编程语言,如Javascript、Python、PHP、Java等

JsonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的json内容。

一、JsonPath安装

添加依赖:

目前在https://github.com/json-path/JsonPath找到最新版本是2.6.0

        <!-- json-path依赖-->

        <dependency>

            <groupId>com.jayway.jsonpath</groupId>

            <artifactId>json-path</artifactId>

            <version>2.6.0</version>

        </dependency>

二、JsonPath使用

调用:

$.data.list[0].roleId

$.roleId

$.data.list[*].roleId

{
    "code": 0,
    "data": {
        "totalCount": 7,
        "pageSize": 10,
        "totalPage": 1,
        "currPage": 1,
        "list": [
            {
                "roleId": "1440544989116395521",
                "roleName": "rolename86918033",
                "roleDescribe": "角色描述",
                "createTime": 1632287664000,
                "permissionList": null,
                "permissionIdList": null
            },
            {
                "roleId": "admin",
                "roleName": "管理员角色",
                "roleDescribe": "系统内置角色",
                "createTime": 1588231288000,
                "permissionList": null,
                "permissionIdList": null
            },
            {
                "roleId": "auditor",
                "roleName": "审计员角色",
                "roleDescribe": "系统内置角色",
                "createTime": 1588231217000,
                "permissionList": null,
                "permissionIdList": null
            }
        ]
    }
}

 获取json值的代码:

import com.jayway.jsonpath.JsonPath;

       String jsonStr3="";
        //获取单个值
        String roleId1=JsonPath.read(jsonStr3, "$.data.list[0].roleId");
        //获取所有值
        List<String> roleIds=JsonPath.read(jsonStr3, "$.data.list[*].roleId");
// 获取0、2
        List<String> roleId2 = JsonPath.read(jsonStr3,"$.data.list[0,2].roleId");
        // 获取0-2(不含2)
        List<String> roleId3 = JsonPath.read(jsonStr3,"$.data.list[0:2].roleId");
        System.out.println("roleId1:" + roleId1);
        System.out.println("roleIds:" + roleIds);
        System.out.println("roleId2:" + roleId2);
        System.out.println("roleId3:" + roleId3);

获取带空格的字段出现问题

List<String> listA = JsonPath.read(resultContent,"$.data.BINARY DATA[*].value");

时报错:

Exception in thread "main" com.jayway.jsonpath.InvalidPathException: Use bracket notion ['my prop'] if your property contains blank characters. position: 7

解决方法:按提示加上

List<String> listA = JsonPath.read(resultContent,"$.data.['BINARY DATA'][*].value");

yet,OK获取到结果:["SM4_GCM","AES_GCM"]

参考:

https://zhuanlan.zhihu.com/p/30188199

https://github.com/json-path/JsonPath

Java JsonPath | 强大的解析工具 快速处理 Json 语法使用_Wbw Belief的博客-CSDN博客_java jsonpath

JSON:fastjson、jackson、gson的选择之惑

https://blog.csdn.net/mu_wind/article/details/93725063#3_jsonpath_96

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,关于使用jsonPath解析json的问题,我可以回答你。jsonPath是一种用于查询Json数据的语言,类似于XPath用于xml,它可以快速定位到json数据中特定的节点,从而方便进行操作。 在Java中,我们可以使用JsonPath库来解析json数据。首先,需要添加jsonPath库的依赖,例如使用Maven的话,可以在pom.xml文件中加入以下代码: ```xml <dependency> <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path</artifactId> <version>2.4.0</version> </dependency> ``` 然后,在Java代码中,我们可以使用以下代码来解析json数据: ```java String json = "{\"name\":\"John\",\"age\":30,\"cars\":[ \"Ford\", \"BMW\", \"Fiat\" ]}"; JSONObject jsonObject = new JSONObject(json); // 先将json字符串转为JSONObject对象 String name = jsonObject.getString("name"); // 获取name字段的值 int age = jsonObject.getInt("age"); // 获取age字段的值 JSONArray cars = jsonObject.getJSONArray("cars"); // 获取cars字段的值,这是一个JSONArray对象 String firstCar = cars.getString(0); // 获取cars数组中第一个元素的值 System.out.println(name); System.out.println(age); System.out.println(firstCar); ``` 此外,使用JsonPath库,我们也可以通过以下代码来获取json数据中特定的节点: ```java String json = "{\"name\":\"John\",\"age\":30,\"cars\":[ \"Ford\", \"BMW\", \"Fiat\" ]}"; Object document = Configuration.defaultConfiguration().jsonProvider().parse(json); String name = JsonPath.read(document, "$.name"); // 获取name字段的值 int age = JsonPath.read(document, "$.age"); // 获取age字段的值 String firstCar = JsonPath.read(document, "$.cars[0]"); // 获取cars数组中第一个元素的值 System.out.println(name); System.out.println(age); System.out.println(firstCar); ``` 希望我的回答能帮助到你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁宁可可

您的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值