首页 > 解决方案 > 使用 Kotlinx.Serialization 解析嵌套的 JSON

问题描述

我一直在玩 Kotlinx.serialization,我一直在尝试解析一个子字符串:

给定一个像这样的 JSON:

{
   "Parent" : {
     "SpaceShip":"Tardis",
     "Mark":40
   }
}

我的代码是这样的:

data class SomeClass(
   @SerialName("SpaceShip") ship:String,
   @SerialName("Mark") mark:Int)

显然,Json.nonstrict.parse(SomeClass.serializer(), rawString)会失败,因为“SpaceShip”和“Mark”这对不在 JSON 的根目录中。

如何让序列化程序引用 JSON 的子树?

PS:你会推荐改造吗(因为它更老,也许更成熟)?

标签: jsonparsingkotlinkotlinx.serialization

解决方案


@Serializable
data class Parent(
    @SerialName("Parent")
    val someClass: SomeClass
)

@Serializable
data class SomeClass(
    @SerialName("SpaceShip")
    val ship: String,
    @SerialName("Mark")
    val mark: Int
)

fun getSomeClass(inputStream: InputStream): SomeClass {
    val json = Json(JsonConfiguration.Stable)
    val jsonString = Scanner(inputStream).useDelimiter("\\A").next()
    val parent = json.parse(Parent.serializer(), jsonString)
    return parent.someClass
}

推荐阅读