Java JsonPath 解析JSON数据
JSONPath - 用于JSON的XPath,用来解析多层嵌套的json数据;是一种信息抽取类库,是从JSON文档中抽取指定信息的工具. JsonPath有许多编程语言,如Javascript、Python、PHP、Java等
JsonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的json内容。
添加依赖:
目前在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> |
调用:
$.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);
参考:
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