龙空技术网

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

GitHub精选 18344

前言:

现时看官们对“jsin数组”都比较珍视,朋友们都想要了解一些“jsin数组”的相关文章。那么小编同时在网络上搜集了一些关于“jsin数组””的相关内容,希望咱们能喜欢,各位老铁们一起来了解一下吧!

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

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

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

使用准备

添加依赖

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'}

其他模块

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,大多数情况直接更包名就即可。

将JSON解析为JSONObject

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

将JSON解析为JSONArray

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

将JSON解析为Java对象

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

将Java对象序列化为JSON

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

使用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);

将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"}

进阶使用

使用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);

使用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

开源地址:

标签: #jsin数组