我试图将JSON映射到我创建的对象,但我一直遇到困难
这就是JSON的样子
我尝试这样做
var overview: NYTimesBestsellerOverview?
guard let gitUrl = URL(string: URLConstants.BESTSELLER_LIST_OVERVIEW) else { return }
URLSession.shared.dataTask(with: gitUrl) { (data, response
, error) in
guard let data = data else { return }
do {
let decoder = JSONDecoder()
let overview = try decoder.decode(NYTimesBestsellerOverview.self, from: data)
print(overview.num_results)
} catch let err {
print("Err", err)
}
}.resume()
这是我的OBJ:
import Foundation
struct NYTimesBestsellerOverview: Codable {
let copyright: String
let num_results: Int
let status: String
let results: Results
enum CodingKeys: CodingKey {
case copyright
case num_results
case status
case results
}
}
struct Results: Codable {
var display_name: String
var published_date: String
let books: [Book]
enum CodingKeys: CodingKey {
case display_name
case published_date
case books
}
}
我不断收到此错误消息
err typemismatch(swift.dictionary,swift.decodingerr.context(codingpath:[codingkeys:stringValue:" stringValue:" result",intvalue:nil(],debugdescription,debugdescription:"预计将解码字典,但会找到一个数组,而是找到一个数组。nil((
因为您给定的JSON results
键,例如
"结果":{---}
那是一个字典,所以这个
let results: Results
使用此错误是正确的
"预计将解码字典,但找到了一个数组。
那么您的响应与您发布的JSON不同,看起来像
"结果":[{----}]
验证do
print(String(data: data, encoding: String.Encoding.utf8))
修复尝试
let results: [Results]
您的模型似乎有一些错误尝试使用AppStore:paste json作为代码QuickType的该应用程序重新创建它,它是免费的,您可以使用各种设置,可以使所有模型变量可选。只需将JSON粘贴到该应用程序中,您就会生成模型。请粘贴JSON响应的完整副本,以便我可以为您提供帮助。