如何使用 kotlinx.serialization 部分解码 JSON 字符串?

Posted

技术标签:

【中文标题】如何使用 kotlinx.serialization 部分解码 JSON 字符串?【英文标题】:How to partially decode a JSON string using kotlinx.serialization? 【发布时间】:2020-12-28 17:56:21 【问题描述】:

我有一个类似于 "code": "FOO" 的 JSON 字符串。

现在我想使用kotlinx.serialization 反序列化这个字符串。我尝试了以下方法:

import kotlinx.serialization.*

@Serializable
data class Result(val code: String?)

val decoded = Json.decodeFromString<Result>(jsonString)

这在 JSON 仅包含 code 时有效,但实际上 JSON 字符串中可能有其他键(这是我无法控制的)。我只关心code 键,但是当存在其他键时,我的应用程序崩溃了。

如何只解码相关的 JSON 密钥?

【问题讨论】:

【参考方案1】:

进一步调试我的应用程序后,我发现以下错误:

JsonDecodingException:偏移量 14 处的意外 JSON 令牌:遇到未知键“错误”。 在“Json ”构建器中使用“ignoreUnknownKeys = true”来忽略未知键。 JSON 输入:"code":"FOO","otherKey":"Something else"

我找不到任何关于此的文档,但我设法通过将代码更改为以下内容来解决此问题:

import kotlinx.serialization.*

@Serializable
data class Result(val code: String?)

val decoded = Json  ignoreUnknownKeys = true .decodeFromString<ErrorResponse>(jsonString)

【讨论】:

以上是关于如何使用 kotlinx.serialization 部分解码 JSON 字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?