SwiftUI中解码嵌套JSON报错:Google自定义搜索API遇items键缺失问题
问题解决:Google自定义搜索API解码keyNotFound错误
核心问题:URL构造错误
你的代码里URL拼接存在两处语法错误,导致请求返回的不是预期的搜索结果JSON,因此解码时找不到items字段:
\(apiKey)后面多了一个多余的右括号),破坏了URL参数结构num(5)是错误的参数格式,URL查询参数需要用=连接键值对,正确写法是num=5
修复后的URL构造代码
guard let url = URL(string: "\(url)key=\(apiKey)&cx=\(searchEngineId)&q=\(query)&num=5") else { print("Invalid URL") return }
额外排查建议
如果修复后仍有问题,可以在loadData中添加日志,查看实际的HTTP响应状态码和返回内容,确认API返回的JSON结构是否符合预期:
do { let (data, response) = try await URLSession.shared.data(from: url) // 打印HTTP状态码,判断请求是否成功 if let httpResponse = response as? HTTPURLResponse { print("Status code: \(httpResponse.statusCode)") } // 打印返回的JSON字符串,检查结构是否包含items字段 if let responseString = String(data: data, encoding: .utf8) { print("Response content: \(responseString)") } do { let decodedResponse = try JSONDecoder().decode(Response.self, from: data) responseItems = decodedResponse.items } catch { print("Decoding error: \(error)") } } catch { print("Request error: \(error)") }
可选优化:结构体命名规范
建议将嵌套的Items结构体改为单数Item,更符合Swift命名习惯:
struct Response: Codable { let items: [Item] struct Item: Codable { let title: String let link: String } }
内容的提问来源于stack exchange,提问作者workbytaylor
相关产品推荐
相关产品推荐

