Разбор вложенного JSON с 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?
PS: Вы бы порекомендовали вместо этого модернизацию (потому что она старше, а может и более зрелая)?
Спасибо
1 ответ
Решение
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
}