首页 > 解决方案 > 将 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()

这是我的对象:

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 但找到了一个数组。", underlyError: nil))

标签: iosjsonswift

解决方案


您的模型似乎有一些错误尝试使用 AppStore 中的此应用程序重新创建它:将 JSON 粘贴为代码 QuickType 它是免费的,您可以使用各种设置,您可以将所有模型变量设为可选。只需将您的 JSON 粘贴到应用程序中,您就会生成模型。请粘贴 JSON 响应的完整副本,以便我为您提供帮助。


推荐阅读