fastjson 解析 阿里最新JSON解析库发布,性能碾压fastjson和jackson

《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个阿里开源的高性能的JSON库——FASTJSON2。

fastjson 解析 阿里最新JSON解析库发布,性能碾压fastjson和jackson

fastjson2是FASTJSON项目的重要升级,目标是为下一个十年提供一个高性能的JSON库。通过同一套API,

支持JSON/JSONB两种协议支持全量解析和部分解析支持Java服务端、客户端Android、大数据场景支持Kotlin支持Android (2.0.3.android)支持Graal Native-Image (2.0.3.graal)

使用准备

1 添加依赖

Maven:

<dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.3</version></dependency>

Gradle:

dependencies {implementation 'com.alibaba.fastjson2:fastjson2:2.0.3'}

2 其他模块

Fastjson v1兼容模块

如果原来使用fastjson 1.2.x版本,可以使用兼容包,兼容包不能保证100%兼容,请仔细测试验证,发现问题请及时反馈。

Maven:

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.3</version></dependency>

Gradle:

dependencies {implementation 'com.alibaba:fastjson:2.0.3'}

kotlin集成模块

如果项目使用Kotlin,可以使用fastjson-kotlin模块,使用方式上采用kotlin的特性。

Maven:

<dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2-kotlin</artifactId><version>2.0.3</version></dependency>

Gradle:

dependencies {implementation("com.alibaba.fastjson2:fastjson2-kotlin:2.0.3")}

简单使用

在fastjson v2中,package和1.x不一样,是com.alibaba.fastjson2。如果你之前用的是fastjson1,大多数情况直接更包名就即可。

1 将JSON解析为JSONObject

String text = "...";JSONObject data = JSON.parseObject(text);byte[] bytes = ...;JSONObject data = JSON.parseObject(bytes);

2 将JSON解析为JSONArray

String text = "...";JSONArray data = JSON.parseArray(text);

3 将JSON解析为Java对象

String text = "...";User data = JSON.parseObject(text, User.class);

4 将Java对象序列化为JSON

Object data = "...";String text = JSON.toJSONString(data);byte[] text = JSON.toJSONbytes(data);

5 使用JSONObject、JSONArray

获取简单属性

String text = "{"id": 2,"name": "fastjson2"}";JSONObject obj = JSON.parseObject(text);int id = obj.getIntValue("id");String name = obj.getString("name");

读取JavaBean

JSONArray array = ...JSONObject obj = ...User user = array.getObject(0, User.class);User user = obj.getObject("key", User.class);

转为JavaBean

JSONArray array = ...JSONObject obj = ...User user = obj.toJavaObject(User.class);List<User> users = array.toJavaList(User.class);

6 将JavaBean对象序列化为JSON

class User { public int id; public String name;}User user = new User();user.id = 2;user.name = "FastJson2";String text = JSON.toJSONString(user);byte[] bytes = JSON.toJSONBytes(user);

序列化结果

{"id" : 2,"name" : "FastJson2"}

进阶使用

1 使用JSONB

将JavaBean对象序列化JSONB

User user = ...;byte[] bytes = JSONB.toBytes(user);byte[] bytes = JSONB.toBytes(user, JSONWriter.Feature.BeanToArray);

将JSONB数据解析为JavaBean

byte[] bytes = ...User user = JSONB.parseObject(bytes, User.class);User user = JSONB.parseObject(bytes, User.class, JSONReader.Feature.SupportBeanArrayMapping);

2 使用JSONPath

使用JSONPath读取部分数据

String text = ...;JSONPath path = JSONPath.of("$.id"); // 缓存起来重复使用能提升性能JSONReader parser = JSONReader.of(text);Object result = path.extract(parser);

使用JSONPath读取部分byte[]的数据

byte[] bytes = ...;JSONPath path = JSONPath.of("$.id"); // 缓存起来重复使用能提升性能JSONReader parser = JSONReader.of(bytes);Object result = path.extract(parser);

使用JSONPath读取部分byte[]的数据

byte[] bytes = ...;JSONPath path = JSONPath.of("$.id"); // 缓存起来重复使用能提升性能JSONReader parser = JSONReader.ofJSONB(bytes); // 注意这里使用ofJSONB方法Object result = path.extract(parser);

—END—

开源协议:Apache2.0

开源地址:https://github.com/alibaba/fastjson2

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
(0)
用户投稿
上一篇 2022年6月28日
下一篇 2022年6月28日

相关推荐

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息