相关文章推荐
没有腹肌的黑框眼镜  ·  春游八里城:聆听历史的声音_肇州·  2 年前    · 
有情有义的蚂蚁  ·  直属单位_南阳市教育局·  2 年前    · 
读研的橙子  ·  电影中的地图炮:犯罪片更青睐东北还是西南?·  3 年前    · 
阳刚的数据线  ·  沈阳市人民政府·  3 年前    · 
干练的红薯  ·  Sci.Fun【选题推荐】园艺学专业毕业论文 ...·  3 年前    · 
Code  ›  ARTS Tips:Java中Json的利器JsonPath 接着上次的Json处理来讨论,层次较深的Json结构在Java代码中访问起来非常不便,层层定义JavaBean不说,写起... - 雪球
jsonpath
https://xueqiu.com/7934423413/150719775
逼格高的自行车
3 年前
首页
行情
行情中心 筛选器 新股上市 买什么
交易
A股交易 基金交易 私募中心
下载App
扫一扫,下载
 登录/注册
学习者老六
学习者老六 ()
发布于2020-06-03 13:11 来自雪球
 关注

ARTS Tips:Java中Json的利器JsonPath

来源:雪球App,作者: 学习者老六,(https://xueqiu.com/7934423413/150719775)

接着上次的Json处理来讨论,层次较深的Json结构在Java代码中访问起来非常不便,层层定义JavaBean不说,写起代码起来要多敲不少按键,同时访问灵活度也不好。

其实有个叫 json-path/JsonPath 的开源java库专门用于解决这种问题,它的主要设计思路是模拟xpath来访问json字符串,拥有强大的访问逻辑和方法,可以用于快速处理json串,尤其是在读取的时候。细看这个库后,可以看到它其实是基于JSONPath这个规范。

JSONPath - XPath for JSON 不是一个正式的规范,是一名叫Stefan Goessner提出的访问Json串的规范,主要的思路就是借鉴XPATH来提供一套应用于JSON格式的方法,作者同时给出了js和php的实现,从使用方法来看,这是一个很实用的规范。JSONPath和Xpath对应的基本访问方式定义对比如下

用个官方的例子来解释一下

下面是些常见的用法

除了可以快速访问以外,还有一个过滤的功能也相当实用,表格中倒数第二个、倒数第三个就是不错的例子。

了解完规范,我们回到Java版的 json-path/JsonPath: Java JsonPath implementation ,这里赞一下 kallestenflo ,他这个库的设计和实现的非常好,远超我的预期,比官方的js实现也要完整的多,在java中方法非常较简单,首先添加依赖

具体用法如下

fluent风格的API如下

Java版本还提供一些实用功能:

- 支持Gson、Jackson
- 有一些内置的函数和专用的过滤操作符
- 基于JsonPath可以快速赋值 String newJson = JsonPath.parse(json).set("$['store']['book'][0]['author']", "Paul").jsonString();
- 查询出来的json串,可以直接做JavaBean类型转换,这里还支持范型
- Inline Predicates嵌入式谓词:可以在表达式中直接完成组合式的过滤条件
- Filter Predicates自定义条件过滤谓词:这里可以定制专有的过滤谓词,可以组合实现非常复杂的过滤条件
- 支持cache

这个库的还有一个比较有用的地方是在爬虫中处理得到的数据,在爬取数据的过程中,服务端的API每个都对应实现一套JavaBean,必要性也不是很强,这个时候就很适合发挥作用。

再补充一下,在Java里生成Json串的话,最基本的方法是用JavaBean序列化,不过还有些其它办法,这里提到了一种快速的方法,如果格式比较固定,其实用一个模板语言来生成Json串也比较实用,主要的优势是比较直观。另外一个思路就是先生成Map对象,然后把这个Map转化为Json字符串,这个有一堆的库可以实现。

最后总结一下,在java中想要轻松愉快的和Json打交道,有不少方法可以尝试,这些方法是借鉴自其它语言或领域,再转化为java专用的工具之后,也足够好用,关键在于使用者的工具箱里有没有这些工具。

Reference

- json-path/JsonPath: Java JsonPath implementation
- jsonpath online evaluator
- JSONPath - XPath for JSON
- JSON JSONPath – REST API Tutorial
- Introduction to JsonPath | Baeldung
- jsonpath - npm

   
 
推荐文章
没有腹肌的黑框眼镜  ·  春游八里城:聆听历史的声音_肇州
2 年前
有情有义的蚂蚁  ·  直属单位_南阳市教育局
2 年前
读研的橙子  ·  电影中的地图炮:犯罪片更青睐东北还是西南?
3 年前
阳刚的数据线  ·  沈阳市人民政府
3 年前
干练的红薯  ·  Sci.Fun【选题推荐】园艺学专业毕业论文参考题目 - 知乎
3 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号