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

Kotlin中使用Retrofit解析JSON动态键的问题排查与解决

解决Retrofit+Gson解析含动态键JSON时values字段为空的问题

问题场景

JSON结构中values字段下是以动态字符串为键的数据对象,最初定义了如下数据类:

data class ApiResponse(val status: Int, val values: WorkflowsTest?)
data class WorkflowsTest(val values: Map<String, Id>?)
data class Id(val id: String)

配置Retrofit使用GsonConverterFactory发起请求后,返回的ApiResponse中values始终为空(日志显示values=WorkflowsTest(values=null),请求状态status=1表示成功),但在main函数中直接用Gson解析相同JSON字符串却能正常获取数据。

问题原因

当JSON节点对应的是动态键的对象时,用固定字段的自定义数据类(如WorkflowsTest)接收会导致解析失败:Gson无法将动态变化的键名匹配到数据类的固定字段上,无法完成映射,最终导致values字段为空。

解决方法

将ApiResponse的values字段类型直接改为Map<String, Id>?,让Gson自动将动态键的对象转换为键值对集合:

data class ApiResponse(
    val status: Int,
    val values: Map<String, Id>? // 替换原WorkflowsTest?类型
)

data class Id(val id: String)

修改后,Retrofit即可正确解析values字段下的动态键数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:10:20