在Swift中如何结合Alamofire与Codable协议解析JSON数据
问题排查&修复方案
- 问题1:JSON结构匹配错误
GitHub公开用户列表接口返回的根结构直接是用户对象数组,并非外层包裹了带Users字段的对象,你额外定义的UserInfo结构体属于多余的嵌套结构,是解析失败的核心原因。 - 问题2:命名不规范
Swift类型命名遵循大驼峰规则,usersInfo不符合语法规范,同时属性名Users大写也和实际接口字段规则不匹配。 - 问题3:可选优化点:蛇形键转换
JSON字段常用蛇形命名(比如avatar_url),Swift推荐小驼峰命名,可通过JSONDecoder的keyDecodingStrategy自动转换,不需要手动写蛇形属性名。
修复后代码
数据模型
// 不需要额外定义外层包裹结构体,直接定义用户模型即可 struct User: Codable { let login: String let url: String // 遵循Swift小驼峰命名规范,解码器会自动匹配JSON的avatar_url字段 let avatarUrl: String }
网络请求逻辑
// 你的存储用户数组的成员/全局属性 var users: [User] = [] func alamoFireRequest(requestURL: String) { // 改用weak self避免循环引用 Alamofire.request(requestURL, method: .get).response { [weak self] response in guard let self = self, let data = response.data else { return } do { let decoder = JSONDecoder() // 开启蛇形字段自动转Swift小驼峰的能力 decoder.keyDecodingStrategy = .convertFromSnakeCase // 直接解析数组类型,和接口返回的根结构匹配 let userList = try decoder.decode([User].self, from: data) self.users = userList // 若需要更新UI,务必切到主队列执行:DispatchQueue.main.async { 你的UI刷新逻辑 } } catch { print("解析错误详情:\(error)") } } }
如果你调用的是其他返回嵌套结构的接口,才需要定义对应的外层结构体,同时需要保证属性名和JSON字段完全匹配,或者通过
CodingKeys枚举自定义字段映射关系。
内容的提问来源于stack exchange,提问作者As If Prince
相关产品推荐
相关产品推荐

