Swift中API返回的嵌套JSON无法解码,usrData字段返回null
问题解决:Swift JSONDecoder嵌套数据解码返回null
核心问题
两处不匹配导致嵌套数据解码失败:
- JSON中的嵌套字段是
details,但模型里定义的是usrData,键名不对应,解码器找不到对应数据,返回nil。 - 打印语句里的
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
相关产品推荐
相关产品推荐

