View on GitHub

fastjson2

🚄 FASTJSON2是FASTJSON项目的重要升级,目标是为下一个十年提供一个高性能的JSON库

1. 使用准备

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

1.1 添加依赖

Maven:


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

Kotlin Gradle:

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

1.2 导包工作

每当调用fastjson-kotlin里的函数时,需要完成导包工作,否则会提示找不到相应函数

例如:

import com.alibaba.fastjson2.to
import com.alibaba.fastjson2.into

如果使用的函数很多时,可以使用通配符导入。

import com.alibaba.fastjson2.*

2. 简单使用

这里,我们对函数名为tointo做了统一。

首先实例定义一个公共类

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

2.1 将JSON解析为JSONObject

val text = "..." // String
val data = text.parseObject()

val bytes = ... // ByteArray
val data = bytes.parseObject() // JSONObject

2.2 将JSON解析为JSONArray

Kotlin:

val text = "..." // String
val data = text.parseArray() // JSONArray

2.2 实例指定类的TypeReference

val refer = reference<User>()

2.3 将JSON解析为实例对象

无泛型实例:

val text = "..." // String
val data = text.to<User>() // User

含泛型实例:

val text = "..." // String
val data = text.into<List<User>>() // List<User>
val data = text.into<Map<String, User>>() // Map<String, User>

2.4 将实例对象序列化为JSON

序列化为字符串:

val data = "..." // Any
val text = text.toJSONString() // String

序列化为字节数组:

val data = "..." // Any
val bytes = text.toJSONByteArray() // ByteArray

2.5 使用JSONObjectJSONArray

2.5.1 获取简单属性

val text = "..."
val data = JSON.parseObject(text) // JSONObject

val id = data.getIntValue("id") // Int
val name = data.getString("name") // String

2.5.2 读取实例对象

无泛型实例:

val obj = ... // JSONObject
val array = ... // JSONArray

val user = array.to<User>(0)
val user = obj.to<User>("key")

含泛型实例:

val obj = ... // JSONObject
val array = ... // JSONArray

val user = array.into<List<User>>(0)
val user = obj.into<List<User>>("key")

2.5.3 转为实例对象

无泛型实例:

val obj = ... // JSONObject
val array = ... // JSONArray

val user = obj.to<User>() // User
val users = array.toList<User>() // List<User>

含泛型实例:

val obj = ... // JSONObject
val array = ... // JSONArray

val user = obj.into<HashMap<String, User>>() // HashMap<String, User>
val users = array.into<ArrayList<User>>() // ArrayList<User>

2.5 URLInputStream转为实例对象

无泛型实例:

val url = ... // URL
val data = url.to<User>()
val input = ... // InputStream
val data = input.to<User>()

含泛型实例:

val url = ... // URL
val data = url.into<List<User>>()
val input = ... // InputStream
val data = input.into<List<User>>()

3. 进阶使用

3.1 使用JSONPath

3.1.1 使用JSONPath读取部分数据

val text = "..."
val path = "$.id".toPath() // JSONPath

val parser = JSONReader.of(text)
val result = path.extract(parser)