《开源精选》是我们分享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)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
开源地址:http://github.com/alibaba/fastjson2
相关文章