用 Kotlinx.Serialization 解析嵌套的 JSON

Parse a nested JSON with Kotlinx.Serialization

我一直在玩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 的子树?

P.S:您会推荐改装吗(因为它更旧,也许更成熟)?

import kotlinx.serialization.*
import kotlinx.serialization.json.Json


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

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

fun main() {
    val parent = Json.parse(Parent.serializer(), "{\"Parent\":{\"SpaceShip\":\"Tardis\",\"Mark\":40}}")
    println(parent)
}
@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
}