将Json映射到快速对象时遇到问题

时间:2019-07-06 17:28:37

标签: ios json swift

我正在尝试将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进行解码,但是找到了一个数组。”,底层错误:零))

2 个答案:

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