Failed to decode JSON typeMismatch(Swift.Dictionary<Swift.String, Any>, Swift.DecodingError.Context(codingPath: [], debugDescription: "Expected to decode Dictionary<String, Any> but found an array instead.", underlyingError: nil))

swift

#1

Добрый день, хочу получить данные через rest api , но появляется ошибка
Модель данных такая :
struct Images: Decodable {
var title: String
var url: String
var thumbnailUrl: String
}
функция получения данных следующая:
import Foundation
import UIKit
class ViewModels{

func request(urlString: String, completion: @escaping (Result<Images, Error>) -> Void) {
    guard let url = URL(string: urlString) else { return }
    URLSession.shared.dataTask(with: url) { (data, response, error) in
        DispatchQueue.main.async {
            if let error = error {
                completion(.failure(error))
                return
            }
            guard let data = data else { return }
            do {
                let images = try JSONDecoder().decode(Images.self, from: data)
                completion( .success(images))
                
            }catch let jsonError {
                print("Failed to decode JSON", jsonError)
            }
            
        }
    }.resume()
}

}
Но появляется ошибка, описанная в теме


#2

Это явно ошибка декодирования. Тебе приходят не те данные, что описаны в модели.
После строки guard let data = data else { return } добавь это:

if let jsonString = String(data: data, encoding: .utf8) { print(“response:\n(jsonString)”) }

и посмотри, что тебе приходит по факту и сравни со своей моделью.

Рекомендую после обработки ошибки (перед развёртыванием опционала data) добавить это:

guard let httpResponse = response as ? HTTPURLResponse else  { return }

let code = httpResponse.statusCode

print(code)

Так ты увидишь код ответа сервера. Если не начинается на 200 (то есть не 200, 201 и тд), то ошибка в запросе