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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:27:34