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

使用Retrofit与Gson解析含未知数字key的JSON字符串报错如何解决

错误原因

  1. 你定义的NamesListNWEntity中list字段类型多嵌套了一层结构:根据你提供的JSON,list下的数字key对应的value直接就是NameNW结构的对象,没有额外的字符串key层,你写的Map<Int, Map<String, NameNW>>会让Gson尝试解析第二层Map,实际遇到的是NameNW对象,就会抛出类型不匹配的错误。
  2. 补充说明:JSON对象的key本质都是字符串类型,Gson默认支持自动将字符串格式的数字key转换为Int类型的Map键,不需要额外配置。

解决方案

第一步:修正实体类定义

直接修改NamesListNWEntity的list字段类型即可,修改后代码如下:

data class NamesListNWEntity(
    val action: String,
    val list: Map<Int, NameNW>, // 去掉多余的Map嵌套
    val status: String
)

修改完成后即可正常解析返回的JSON结构,list的key就是对应的数字值,value就是对应的NameNW实例,不需要修改服务端代码。

第二步(可选):将数字key存入NameNW实例

如果需要把数字key也整合到实体类中,可以在拿到解析结果后手动转换:

// 解析拿到NamesListNWEntity后做转换
val nameList = namesListNWEntity.list.map { (id, nameNW) ->
    NameWithId(
        id = id,
        nickname = nameNW.nickname,
        fullname = nameNW.fullname
    )
}

// 对应业务实体类定义示例
data class NameWithId(
    val id: Int,
    val fullname: String,
    val nickname: String
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 20:15:10