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

Swift调用RapidAPI时JSON解码模型不匹配错误求助

问题原因

你遇到的解码错误是因为API返回的response字段是整数数组(比如[2015,2016,...]),但你定义的Model中response类型是[Response]?,而Response结构体期望解码字典(键值对),实际解析到的却是单个数字,类型不匹配导致报错。

修正方案

直接修改Model结构,把response的类型改为[Int]?,不需要额外的Response结构体:

struct Model: Decodable {
    let results: Int?
    let response: [Int]?
}

解码后直接访问数组元素即可:

do {
    let info = try JSONDecoder().decode(Model.self, from: data)
    print(info.response?.first ?? 0) // 输出2015
} catch let error {
    print(error)
}
完整修正代码
func apiCall(){
    guard let url = URL(string:"https://api-nba-v1.p.rapidapi.com/seasons") else {return}
    
    var request = URLRequest(url: url)
    let headers = [
        "X-RapidAPI-Key": "", // 填入你的RapidAPI Key
        "X-RapidAPI-Host": "api-nba-v1.p.rapidapi.com"
    ]
    request.httpMethod = "GET"
    request.allHTTPHeaderFields = headers
    
    URLSession.shared.dataTask(with: request) { data, response, error in
        if let error = error {
            print(error)
            return
        }
        
        guard let data = data, let response = response as? HTTPURLResponse, response.statusCode == 200 else {
            return
        }
        
        do {
            let info = try JSONDecoder().decode(Model.self, from: data)
            print(info.response?.first ?? 0)
        } catch let error {
            print(error)
        }
    }.resume()
}

struct Model: Decodable {
    let results: Int?
    let response: [Int]?
}
补充说明

如果后续API返回的response结构变更(比如变为字典数组),再对应调整模型结构即可。当前API返回的response是纯整数数组,用[Int]类型匹配最直接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:57:17