json - 为什么编码键或 keyDecodingStrategy 不起作用?
问题描述
我正在尝试构建一个简单的应用程序,用户可以在其中搜索 GitHub 存储库,但由于无法正确解码 JSON,我的请求失败。我有一个名为“Search”的模型,如果我使用snake_case 表示法命名字段,则解码有效。但是,我想使用 camelCase 表示法并使用 decoderKeys 或 decoder.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
}
解决方案
哎呀,我自己找到了答案。我想我完全忘记了其他模型不是驼峰命名法。对此感到抱歉
推荐阅读
- c# - 状态机 C#
- python-3.x - Python:在站点包文件夹中的 docker 容器中安装本地包
- powerbi - RANKX 没有给出正确的结果
- postgresql - 使用 Linq2DB for PostgreSQL 按周分组
- java - 发出 java gradle “找不到 org.jnetpcap:jnetpcap:1.4.1。”
- azure - 在 Azure 构建管道中创建构建时触发存储库中的特定项目
- java - 将带有密钥动态的json转换为POJO .. java spring boot
- r - 如何分组两次?
- java - java - 如何使用Java中的嵌套for循环生成那么多编号的字母行?
- xampp - 为什么 Sequel Pro 无法连接到 Catalina 上的本地 XAMPP 服务器?