近期fastjson2发布了2.0.3版本, 其中新增了fastjson2-kotlin模块。
这个模块是对fastjson2使用kotlin的特性做的拓展支持,这个模块起源由我发展,于是做使用方式介绍。

简单使用

添加依赖

Maven:

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

Kotlin Gradle:

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

随着时间流逝, 上面的版本号可能过时了, 您可以前往 Maven Central 获取最新版本号

使用准备

首先用例定义一个类

class User(
    var id: Int,
    var name: String
)

反序列化

import com.alibaba.fastjson2.*

val text = """{"id":1,"name":"kraity"}"""
val user = text.parseObject<User>()

这样就反序列化了一个User对象, 对很简洁。

那有没有更简洁的呢?

val user = text.to<User>()

这样是不是更简洁了呢!

2022-05-15更新

我们在FASTJSON2开发群中, @温少 发送了一条关于新增功能JSONScheme的用例
用例中使用了toJavaObject, 我提及到这个方法名有些冗余, 经过讨论决定重命名为to

那么在复杂泛型中, 上面的写法可能不符合预期, 例如

text.to<Map<String, User>>()

它可能会不符合预期

我于是在fastjson2-kotlin模块中, 新增into名的方法,
其内部使用 TypeReference, 正确写法为

text.into<Map<String, User>>()

这将会符合预期!

序列化

val text = user.toJSONString() // String
val text = user.toJSONByteArray() // ByteArray

判断格式

判断一个文本数据是否为合法的格式

import com.alibaba.fastjson2.*

val text =  "{...}"
val bool = text.isJSONObject()

val text =  "[...]"
val bool = text.isJSONArray()

注册组件

import com.alibaba.fastjson2.reader.*

// ObjectReader
val reader = ...
// Boolean
val status = reader.register<User>()
import com.alibaba.fastjson2.writer.*

// ObjectWriter
val writer= ...
// Boolean
val status = writer.register<User>()

复杂泛型

TypeReferenceJava中使用时候, 写的代码可能不太好看或者不太简洁

Java:

TypeReference<Response<User>> refer = new TypeReference<Response<User>>() {
};

那么在kotlin中, 只需要调用一个函数即可啦

Kotlin:

val refer = reference<Response<User>>()

对没错, 就是这么简洁

结尾

快乐时光就是这么短暂, 本文结尾啦, 已简单的介绍fastjson2-kotlin的其中一些方法, 如果想了解更多可以前往 GitHub仓库 查看函数的注释, 我一般都做了使用用例!

#none
更新于: 2022年05月15日 22:34
679
4
发表评论
  1. 👻看不懂 点赞就对了

  2. 过来点赞就对了😌