fastjson2/docs/kotlin_cn.md
谭九鼎 3f5df1bcff
fix typo in docs (#3207)
* Update README.md

* Update README_EN.md

* Update index.md

* Update kotlin_cn.md

* Update kotlin_en.md
2024-12-14 19:35:47 +08:00

235 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 1. 使用准备
如果项目使用`Kotlin`,可以使用`fastjson-kotlin`模块,使用方式上采用`kotlin`的特性。
### 1.1 添加依赖
`Maven`:
```xml
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-kotlin</artifactId>
<version>2.0.53</version>
</dependency>
```
酌情添加标准库(kotlin-stdlib)、反射库(kotlin-reflect)
其中若使用数据类(data class)、通过构造函数传入参数则添加反射库。
```xml
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>${kotlin-version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
<version>${kotlin-version}</version>
</dependency>
```
* `Kotlin Gradle`:
```kotlin
dependencies {
implementation("com.alibaba.fastjson2:fastjson2-kotlin:2.0.53")
}
```
```kotlin
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version")
implementation("org.jetbrains.kotlin:kotlin-reflect:$kotlin_version")
}
```
### 1.2 导包工作
每当调用`fastjson-kotlin`里的函数时,需要完成导包工作,**否则会提示找不到相应函数**。
例如:
```kotlin
import com.alibaba.fastjson2.to
import com.alibaba.fastjson2.into
```
如果使用的函数很多时,可以使用通配符导入。
```kotlin
import com.alibaba.fastjson2.*
```
# 2. 简单使用
这里,我们对函数名为`to``into`做了统一。
- 使用`to`时利用`::Class.java`,适用于不含泛型的类。
- 使用`into`时利用`TypeReference`,适用于含泛型的类。
首先实例定义一个公共类
```kotlin
class User(
var id: Int,
var name: String
)
```
### 2.1 将`JSON`解析为`JSONObject`
```kotlin
val text = "..." // String
val data = text.parseObject()
val bytes = ... // ByteArray
val data = bytes.parseObject() // JSONObject
```
### 2.2 将`JSON`解析为`JSONArray`
`Kotlin`:
```kotlin
val text = "..." // String
val data = text.parseArray() // JSONArray
```
### 2.2 实例指定类的`TypeReference`
```kotlin
val refer = reference<User>()
```
### 2.3 将`JSON`解析为实例对象
无泛型实例:
```kotlin
val text = "..." // String
val data = text.to<User>() // User
```
含泛型实例:
```kotlin
val text = "..." // String
val data = text.into<List<User>>() // List<User>
val data = text.into<Map<String, User>>() // Map<String, User>
```
### 2.4 将实例对象序列化为`JSON`
序列化为字符串:
```kotlin
val data = "..." // Any
val text = data.toJSONString() // String
```
序列化为字节数组:
```kotlin
val data = "..." // Any
val bytes = data.toJSONByteArray() // ByteArray
```
### 2.5 使用`JSONObject`、`JSONArray`
#### 2.5.1 获取简单属性
```kotlin
val text = "..."
val data = JSON.parseObject(text) // JSONObject
val id = data.getIntValue("id") // Int
val name = data.getString("name") // String
```
#### 2.5.2 读取实例对象
无泛型实例:
```kotlin
val obj = ... // JSONObject
val array = ... // JSONArray
val user = array.to<User>(0)
val user = obj.to<User>("key")
```
含泛型实例:
```kotlin
val obj = ... // JSONObject
val array = ... // JSONArray
val user = array.into<List<User>>(0)
val user = obj.into<List<User>>("key")
```
#### 2.5.3 转为实例对象
无泛型实例:
```kotlin
val obj = ... // JSONObject
val array = ... // JSONArray
val user = obj.to<User>() // User
val users = array.toList<User>() // List<User>
```
含泛型实例:
```kotlin
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 `URL`、`InputStream`转为实例对象
无泛型实例:
```kotlin
val url = ... // URL
val data = url.to<User>()
```
```kotlin
val input = ... // InputStream
val data = input.to<User>()
```
含泛型实例:
```kotlin
val url = ... // URL
val data = url.into<List<User>>()
```
```kotlin
val input = ... // InputStream
val data = input.into<List<User>>()
```
# 3. 进阶使用
### 3.1 使用`JSONPath`
#### 3.1.1 使用`JSONPath`读取部分数据
```kotlin
val text = "..."
val path = "$.id".toPath() // JSONPath
val parser = JSONReader.of(text)
val result = path.extract(parser)
```