Проблемы с отображением Json на быстрые объекты - PullRequest
0 голосов
/ 06 июля 2019

Я пытаюсь сопоставить 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: «Предполагается, что декодируется словарь, но вместо него найден массив.», underError: nil))

Ответы [ 2 ]

0 голосов
/ 06 июля 2019

В вашей модели, похоже, есть некоторые ошибки, попробуйте воссоздать ее с помощью этого приложения из AppStore: вставьте JSON как Code QuickType, это бесплатно, и вы можете использовать различные настройки, вы можете сделать все переменные модели необязательными. Просто вставьте свой JSON в приложение, и вы получите свою модель. Пожалуйста, вставьте полную копию ответа JSON, чтобы я мог вам помочь.

0 голосов
/ 06 июля 2019

Так как ваш JSON results ключ, как

"результаты": {---}

тогда это словарь, так что

let results: Results

правильно с этой ошибкой

"Ожидается декодирование словаря, но вместо него найден массив.

тогда ваш ответ отличается от того, что вы опубликовали как json, и выглядит как

"результаты": [{---}]

для подтверждения сделайте

print(String(data: data, encoding: String.Encoding.utf8))

чтобы исправить попробуйте

let results: [Results]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...