有问题将JSON映射到Swift对象



我试图将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响应的完整副本,以便我可以为您提供帮助。

最新更新