Ошибка декодирования JSON «но вместо этого найден словарь»IOS

Программируем под IOS
Ответить
Anonymous
 Ошибка декодирования JSON «но вместо этого найден словарь»

Сообщение Anonymous »

Я создаю историю сегодняшнего приложения для iOS с помощью API http://history.muffinlabs.com/date/4/19
Вот моя структура данных:

Код: Выделить всё

struct HistoryAPIResponse: Codable  {
let data: [Events]
}

struct Events: Codable {
let year: String
let text: String
let html: String
}
И вот как я извлекаю из него данные:

Код: Выделить всё

import Foundation
import UIKit

final class HistoryAPICaller {
static let shared = HistoryAPICaller()

struct Constants {
static let topHeadLinesURL = URL(string:
"http://history.muffinlabs.com/date/4/19"
)

static let searchUrlString =

"http://history.muffinlabs.com/date/4/19"

}

private init() {}

public func getTopStories(completion: @escaping (Result) -> Void) {

guard let html = Constants.topHeadLinesURL else {
return
}

let task = URLSession.shared.dataTask(with: html) { data, _, error in

if let error = error {
completion(.failure(error))
}

else if let data = data {
do {
_ = try JSONDecoder().decode(HistoryAPIResponse.self, from: data)
}
catch {
completion(.failure(error))
}
}
}
task.resume()
}

public func search(with query: String, completion: @escaping (Result) -> Void) {
guard !query.trimmingCharacters(in: .whitespaces).isEmpty else {
return
}

let urltring = Constants.searchUrlString + query
guard let html = URL(string:urltring) else {
return
}

let task = URLSession.shared.dataTask(with: html) { data, _, error in

if let error = error {
completion ( .failure(error))
}

else if let data = data {
do {
_ = try JSONDecoder().decode(HistoryAPIResponse.self, from: data)
}
catch {
completion (.failure(error))
}
}
}
task.resume()
}

}
И в одном из сообщений об ошибке говорится:

typeMismatch(Swift.Array, Swift.DecodingError.Context (codingPath: [CodingKeys(stringValue: "data", intValue: nil)], debugDescription: "Ожидал декодирование Array, но вместо этого обнаружил словарь.", базовая ошибка: ноль))

Я вроде понимаю суть проблемы, что данные - это словарь, но как ее решить, учитывая это, не знаю это структура API, в которой все хранится в [data].
Есть идеи, как решить эту проблему? Заранее благодарим за помощь.

Подробнее здесь: https://stackoverflow.com/questions/676 ... ry-instead
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»