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

Retrofit中Kotlin如何编写适配动态日期键的数据类

解决方案

核心思路

JSON中list字段是动态日期字符串为键、症状列表数组为值的结构,Kotlin中直接用Map<String, List<SymptomList>>适配即可,无需逐个定义日期字段。Retrofit配合Gson/Moshi等序列化库时,天然支持这种动态键的Map结构。

步骤1:定义基础数据类

先把单个症状列表的结构SymptomList定义好(根据实际JSON字段调整):

data class SymptomList(
    val symptomName: String,
    val severity: Int,
    val duration: String
    // 补充其他症状相关字段
)

步骤2:定义外层数据类

包含list字段,类型用Map<String, List<SymptomList>>(键用String是因为JSON中的日期以字符串格式存储,后续可自行转换为LocalDate/Date):

data class ResponseData(
    val list: Map<String, List<SymptomList>>
    // 若有其他顶层字段(如code、message)可在此补充
)

关键注意点

  • 不要用MutableMap:Retrofit默认的序列化库(Gson/Moshi)会自动将JSON动态键值对解析为不可变Map,使用MutableMap反而可能导致解析失败,因为序列化库不会主动生成可变集合实例。
  • 日期键转换:如果需要将字符串日期转为LocalDate,可在拿到Map后遍历处理,示例:
    val dateSymptomMap = responseData.list.mapKeys { 
        LocalDate.parse(it.key) 
    }
    
  • 避免误用Dictionary:Dictionary是Java过时类,Kotlin中直接用Map即可,更符合现代Kotlin编程习惯。

Retrofit接口示例

定义对应接口,返回上述ResponseData:

interface SymptomApi {
    @GET("symptoms")
    suspend fun getSymptoms(): Response<ResponseData>
}

这样无论后续新增多少日期键,数据类都能自动适配,无需修改代码,扩展性拉满。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 03:25:27