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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 12:15:03