使用Kotlinx.Serialization解析嵌套的JSON

3
我可以帮您进行中文翻译。以下是润色后的翻译结果:“最初的回答”。

我一直在使用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的子树?
附:您是否推荐使用旧版的Retrofit(因为它更成熟一些)?
2个回答

2
@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
}

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)
}

1
是的,我还没有找到更好的万能解决方案。可以完全像JSON,并且描述得很好。 这可能是最好的了。 然后,在我脑海中响起的问题是:也许所有评论都是正确的,GSON也同样好?… - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接