Java对JSON路径JsonPath例子
1.jsonpath的特点
- 不需要定义java bean、不用对多层map多次迭代,就可以获得json解析树中深层次的节点
- Jayway的jsonpath解析需要把要解析的json一次加载进内存?
2.1 jsonpath表达式的两种方式
{
"tool":
{
"jsonpath":
{
"creator":
{
"name": "Jayway Inc.",
"location":
[
"Malmo",
"San Francisco",
"Helsingborg"
]
}
}
},
"book":
[
{
"title": "Beginning JSON",
"price": 49.99
},
{
"title": "JSON at Work",
"price": 29.99
}
]
}
下面两种方式都是获取里层的location节点的第三个元素:
- 点号表达式: $.tool.jsonpath.creator.location[2]
- 中括号表达式: $[‘tool’][‘jsonpath’][‘creator’][‘location’][2]
2.2 jsonpath的三个符号
- $: 表示json结构的根节点,可以表示一个对象(object)、数组(array)
- @: 表示当前正在处理的节点,常作为谓词表达式的一部分,假设我们正在处理book数组节点,那么
book[?(@.price == 49.99)]指的是book数组内的第一个节点 - *: 表示指定范围内所有元素,是一个通配符,比如book[*]表示book数组内部所有节点
2.3.1 函数
支持在pattern中使用: min(), max(), avg(), stddev() and length().
2.3.1 过滤器
就是布尔表达式来确定那些node可以作为结果返回:
- 相等: ==
- 正则匹配: =~
- 包含: in
过滤器在code中的三种形式:
- 使用预定义的Filter api
- 实现 Predicate 接口,实现自定义filter
- 在pattern里内联filter逻辑,不创建filter对象
2.4 jsonpath的输入
input通过重载(overload)JsonPath.parse()支持String、Object、InputStream、File、URL对象
2.5 修改默认设置
- Option.AS_PATH_LIST : 返回节点的path而不是返回值
- Option.DEFAULT_PATH_LEAF_TO_NULL:所有没有的节点返回null
…
2.6 SPI
- JsonProvider SPI: lets us change the ways JsonPath parses and handles JSON documents.
- MappingProvider SPI: allows for customization of bindings between node values and returned object types.
- CacheProvider SPI: adjusts the manners that paths are cached, which can help to increase performance.
3.json解析的一些方式:
- json->bean: 需要预先定义java bean
- json->Map: 较为深层次的节点需要多次迭代
- jsonpath: 使用复杂的jsonpath表达式来直接获取任意层次节点
4.适用场景
- json->bean: 适合json作为配置文件时,配置文件解析首先考虑可读性,所以优选定义java bean(java bean可读性高)
- json->Map:
5.支持几种解析方式的库?
6.库功能支持对比、解析效率对比?
7.代码例子
github例子:https://github.com/cbfsuper/JavaForOpen/blob/main/Utils/src/main/java/com/cdb/jsonparse/JsonPathParserTest.java
参考:https://www.baeldung.com/guide-to-jayway-jsonpath
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfkgjec
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13