You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从JSON获取交易列表时Kotlin数据类可选字段处理问题

Kotlin 可选JSON字段数据类定义解决方案

核心方案(常规场景推荐)

不需要定义多个重名的数据类,直接在现有交易数据类中新增type字段,声明为可空类型并设置默认值null即可:JSON解析时如果对应条目不存在type字段,会自动填充默认值null,不会触发解析错误。
修改后代码示例:

// Kotlin类名遵循大驼峰命名规范,原transactionsList调整为Transaction更符合规范
data class Transaction(
    val id: String,
    val date: String,
    val description: String,
    val amount: String,
    // 可选字段声明为可空类型,默认值设为null
    val type: String? = null
)

// 对应修改AccountsList中transactions字段的泛型引用
data class AccountsList(
    val id: String,
    val IBAN: String,
    val amount: String,
    val currency: String,
    val transactions: List<Transaction>
)

Gson、Moshi、Jackson等主流Kotlin JSON解析库均原生支持上述写法,无需额外配置。

进阶方案(需区分两类交易的场景)

如果业务逻辑需要对有type和无type的交易做完全不同的处理,可以用密封类实现多态解析:

// 交易密封基类
sealed class Transaction {
    abstract val id: String
    abstract val date: String
    abstract val description: String
    abstract val amount: String
}

// 无type字段的普通交易
data class CommonTransaction(
    override val id: String,
    override val date: String,
    override val description: String,
    override val amount: String
) : Transaction()

// 带type字段的专项交易
data class TypedTransaction(
    override val id: String,
    override val date: String,
    override val description: String,
    override val amount: String,
    val type: String
) : Transaction()

该方案需要给对应JSON解析库配置多态解析适配器,适合两类交易业务逻辑差异较大的场景,普通场景使用可空字段方案即可。

内容的提问来源于stack exchange,提问作者Equlo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:24:04