【发布时间】:2019-07-13 13:45:53
【问题描述】:
我正在尝试构建一个简单的应用程序,用户可以在其中搜索 GitHub 存储库,但由于无法正确解码 JSON,我的请求失败。我有一个名为“Search”的模型,如果我使用snake_case 表示法命名字段,则解码有效。但是,我想使用驼峰命名法并使用解码键或 解码器.keyDecodingStrategy = .convertFromSnakeCase 但似乎没有一个有效,我想知道为什么
这是我的代码,即请求执行:
open class GetRepositoriesRequest: Request {
var query: String
public var headers: [String: String] = [:]
public var parameters: [String: Any] = [:]
public var method: RequestMethod = .GET
public var apiAdress: String
public init(query: String) {
self.query = query
self.apiAdress = "https://api.github.com/search/repositories?q=\(self.query)"
}
public func execute() {
let decoder = JSONDecoder()
let url = URL(string: self.apiAdress)!
var request = URLRequest(url: url)
request.httpMethod = self.method.rawValue
let dataTask = URLSession.shared.dataTask(with: request) {
data,response,error in
do {
guard let data = data else {
return
}
if let jsonResult = try? decoder.decode(Search.self, from: data) {
print(jsonResult)
}
} catch let error as NSError {
print(error.localizedDescription)
}
}
dataTask.resume()
}
}
和模型:
struct Search: Codable {
var totalCount: Double
var incompleteResults: Bool
var items: [Item]
public enum SearchKeys: String, CodingKey {
case totalCount = "total_count"
case incompleteResults = "incomplete_results"
case items
}
}
struct Item: Codable {
let id: Int
let node_id:String
let name: String
let full_name: String
let owner: Owner
}
struct Owner: Codable {
let login: String
let id: Int
let node_id:String
}
【问题讨论】: