Swift中使用Ticketmaster API遭遇keyNotFound错误求技术指导
解决Ticketmaster Discovery API调用的"keyNotFound"错误
这个错误的核心原因是你定义的解码结构体和API实际返回的JSON结构不匹配。Ticketmaster Discovery API返回的events数组并不是直接在JSON根层级,而是嵌套在_embedded字段里的。
修正步骤:
- 调整解码结构体,适配API的JSON结构:
let apiKey = "************" struct EventResponse : Decodable{ let _embedded: Embedded? } struct Embedded: Decodable { let events : [Event] } struct Event : Decodable{ let id : String? } func fetchTMEvents() async throws -> [Event]{ guard let urlTM = URL(string: "https://app.ticketmaster.com/discovery/v2/events.json?apikey=\(apiKey)") else { throw NSError(domain: "Invalid URL", code: -1) } let(data, response) = try await URLSession.shared.data(from: urlTM) // 调试时可打印返回的JSON字符串,确认结构 if let jsonString = String(data: data, encoding: .utf8) { print("API返回内容:\(jsonString)") } let decoded = try JSONDecoder().decode(EventResponse.self, from: data) return decoded._embedded?.events ?? [] } - 调用部分可保持不变,注意处理空数组情况:
Task { do { let events = try await fetchTMEvents() print("API results \(events)") } catch { print("API error \(error)") } }
额外调试建议:
解码前把返回的data转换成字符串打印出来,能直观看到API返回的实际结构,避免结构体定义和实际数据不匹配的问题。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

