json - 使用 Kotlinx.Serialization 解析嵌套的 JSON
问题描述
我一直在玩 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:你会推荐改造吗(因为它更老,也许更成熟)?
解决方案
@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
}
推荐阅读
- android - 通用图像加载器为 ListView 中的错误项目显示错误图像
- node.js - 我必须使用的 async.parallel 或 Q.all ?如何?+ 节点JS
- python - 从无法用 ast.literal_eval 解析的字符串中解析嵌套列表
- php - NULL 到 0 - PHP 数组
- visual-studio - 在 OnTriggerEnter2D 碰撞.getComponents() 中抛出异常,统一
- html - HTML 未在 react-tooltip 的工具提示中呈现
- php - 使用 Woocommerce 中 URL 中的短代码通过 sku 第一个字符获取产品 ID
- python - Pytest 设置和拆卸功能 - 与自写功能相同?
- c# - 如何在unity c#中将我的玩家资料图片私下上传到imgur
- excel - 从 URL HTTPS 下载 xls 文件