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

Swift中API返回的嵌套JSON无法解码,usrData字段返回null

问题解决:Swift JSONDecoder嵌套数据解码返回null

核心问题

两处不匹配导致嵌套数据解码失败:

  1. JSON中的嵌套字段是details,但模型里定义的是usrData,键名不对应,解码器找不到对应数据,返回nil。
  2. 打印语句里的loginResponse.userData?.userID是错误写法,模型里的字段是ID,并非userID。

修正方案一:直接匹配JSON键名

修改模型字段名,让它和JSON键完全一致(同时遵循Swift编码规范,类型名首字母大写):

struct Response: Codable {
    let token: String?
    let details: UserData?
}
struct UserData: Codable {
    let ID, Name, Message: String?
}

同步修正打印语句:

print(loginResponse.details?.ID as Any)

修正方案二:用CodingKeys映射(保留自定义字段名)

如果想保留模型里的usrData字段名,可通过CodingKeys手动映射JSON的details键:

struct Response: Codable {
    let token: String?
    let usrData: UserData?
    
    enum CodingKeys: String, CodingKey {
        case token
        case usrData = "details" // 将JSON的details映射到模型的usrData
    }
}
struct UserData: Codable {
    let ID, Name, Message: String?
}

同样要修正打印语句的字段名:

print(loginResponse.usrData?.ID as Any)

额外排查提示

  • 不要用try?直接忽略解码错误,建议用do-catch捕获具体错误信息,能快速定位问题(比如键名不匹配、类型不兼容等):
do {
    let loginResponse = try JSONDecoder().decode(Response.self, from: data)
    // 后续业务逻辑
} catch {
    print("解码错误详情:\(error)")
    completion(.failure(.invalidCredentials))
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:01:19