分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

JSONPath 表达式的使用

发布时间:2023-09-06 01:37责任编辑:顾先生关键词:JSONP
一、JSONPath使用需要的包
<dependency> ???<groupId>com.jayway.jsonpath</groupId> ???<artifactId>json-path</artifactId> ???<version>2.4.0</version></dependency>
二、使用说明

1、JSONPath是xpath在json的应用
2、JSONPath 是参照xpath表达式来解析xml文档的方式,json数据结构通常是匿名的并且不一定需要有根元素。
3、JSONPath 用一个抽象的名字$来表示最外层对象
4、JSONPath 允许使用通配符 * 表示所以的子元素名和数组索引

三、JSONPath表达式语法

JSONPath 表达式可以使用.符号解析json:
$.store.book[0].title
或者使用[]符号
$[‘store‘][‘book‘][0][‘title‘]

四、测试实例

Json文件内容如下:

{ "store": { ???"book": [ ??????{ "category": "reference", ???????"author": "Nigel Rees", ???????"title": "Sayings of the Century", ???????"price": 8.95 ?????}, ?????{ "category": "fiction", ???????"author": "Evelyn Waugh", ???????"title": "Sword of Honour", ???????"price": 12.99, ???????"isbn": "0-553-21311-3" ?????} ???], ???"bicycle": { ?????"color": "red", ?????"price": 19.95 ???} ?}}

首先,读取json文件,使用commons.io的 FileUtils的readFileToString方法:

String path =System.getProperty("user.dir")+File.separator+"testdata"+File.separator+"test.json";String jsonString = FileUtils.readFileToString(new File(path),"utf-8");ReadContext context = JsonPath.parse(json);

其次,输出book[1]的author值。有两种方法:
方法一:

JsonPath.read(json,"$.store.book[1].author");或context.read("$.store.book[1].author");输出:Evelyn Waugh

方法二:

JsonPath.read(json,"$[‘store‘][‘book‘][1][‘author‘]");context.read("$[‘store‘][‘book‘][1][‘author‘]");输出:Evelyn Waugh

//输出book[*]中category == ‘reference‘的book

List<Object> categorys = context.read("$.store.book[?(@.category == ‘reference‘)]");for(Object st: categorys){ ???System.out.println(st.toString());}输出: ??{category=reference, author=Nigel Rees, title=Sayings of the Century, price=8.95}

//输出book[*]中price>10的book

List<Object> prices = context.read("$.store.book[?(@.price>10)]");for(Object p:prices){ ???System.out.println(p.toString());}输出:{category=fiction, author=Evelyn Waugh, title=Sword of Honour, price=12.99, isbn=0-553-21311-3}

//bicycle[*]中含有color元素的bicycle

List<Object> color = context.read("$.store.bicycle[?(@.color)]");for(Object is :color){ ???System.out.println(is.toString());}输出://{color=red, price=19.95}

//输出该json中所有price的值

List<Object> pp = context.read("$..price");for(Object p :pp){ ???System.out.println(p.toString());}输出: 8.95 ?12.99 ??19.95List<String> authors = context.read("$.store.book[*].author");for (String str : authors) { ???System.out.println(str);}输出:Nigel Rees ????Evelyn Waugh
五、XPATH 和 JSONPath获取元素的方法比较

[]在xpath表达式总是从前面的路径来操作数组,索引是从1开始。
使用JOSNPath的[]操作符操作一个对象或者数组,索引是从0开始。


 


作者:森迪
链接:https://www.jianshu.com/p/94ddacae5d55
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

JSONPath 表达式的使用

原文地址:https://www.cnblogs.com/maybach/p/8304871.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved