如何在 Kotlin 中解析 JSON?

2022-08-31 06:24:14

我从服务接收到一个非常深的JSON对象字符串,我必须将其解析为JSON对象,然后将其映射到类。

如何在 Kotlin 中将 JSON 字符串转换为对象?

在那之后,映射到各自的类,我使用了Jackson的StdDeserializer。问题出现在对象具有属性时,这些属性也必须反序列化为类。我无法在另一个反序列化器中获取对象映射器,至少我不知道该怎么做。

最好是,在本地,我正在尝试减少我需要的依赖项数量,因此,如果答案仅用于JSON操作并进行解析就足够了。


答案 1

毫无疑问,在 Kotlin 中解析的未来将取决于 kotlinx.serialization。它是 Kotlin 库的一部分。版本 kotlinx.serialization 1.0 终于发布

https://github.com/Kotlin/kotlinx.serialization

import kotlinx.serialization.*
import kotlinx.serialization.json.JSON

@Serializable
data class MyModel(val a: Int, @Optional val b: String = "42")

fun main(args: Array<String>) {

    // serializing objects
    val jsonData = JSON.stringify(MyModel.serializer(), MyModel(42))
    println(jsonData) // {"a": 42, "b": "42"}
    
    // serializing lists
    val jsonList = JSON.stringify(MyModel.serializer().list, listOf(MyModel(42)))
    println(jsonList) // [{"a": 42, "b": "42"}]

    // parsing data back
    val obj = JSON.parse(MyModel.serializer(), """{"a":42}""")
    println(obj) // MyModel(a=42, b="42")
}

答案 2

您可以使用此库 https://github.com/cbeust/klaxon

Klaxon 是一个轻量级库,用于在 Kotlin 中解析 JSON。