我正在尝试将JSON映射到我创建的对象,但是我一直遇到困难
this is what the JSON looks like
我尝试这样做
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.DecodingError.Context(codingPath:[CodingKeys(stringValue:“ results”,intValue:nil)]],debugDescription:“预期对Dictionary进行解码,但是找到了一个数组。”,底层错误:零))
答案 0 :(得分:0)
因为您给定的json results
键是
“结果”:{---}
那是一本字典,所以
let results: Results
正确无误
“打算对Dictionary进行解码,但是找到了一个数组。
然后您的响应与您发布为json的响应不同,看起来像
“结果”:[{---}]
验证操作
print(String(data: data, encoding: String.Encoding.utf8))
修复尝试
let results: [Results]
答案 1 :(得分:0)
您的模型似乎有一些错误,请尝试从AppStore使用此应用程序重新创建它:将JSON粘贴为Code QuickType,它是免费的,您可以使用各种设置,使所有模型变量为可选。只需将JSON粘贴到应用程序中,即可生成模型。请粘贴JSON响应的完整副本,以便我为您提供帮助。