Разбор вложенного 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
}
Другие вопросы по тегам