用 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
}
我一直在玩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
}