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
相关产品推荐
相关产品推荐

