Итак, я пытаюсь проанализировать этот JSON, используя протоколы Codable:
https://randomuser.me/api/?results=100
Это в основном 100 случайных пользователей.
Вот мой инициализатор класса пользователя из декодера, который мне нужен, потому что пользователь является сущностью в базовой модели данных:
required convenience public init(from decoder: Decoder) throws {
let managedObjectContext = CoreDataStack.sharedInstance.persistentContainer.viewContext
guard let entity = NSEntityDescription.entity(forEntityName: "User", in: managedObjectContext) else {
fatalError("Failed to decode User")
}
self.init(entity: entity, insertInto: managedObjectContext)
let container = try decoder.container(keyedBy: CodingKeys.self)
let results = try container.nestedContainer(keyedBy: CodingKeys.self, forKey: .results)
let name = try results.nestedContainer(keyedBy: CodingKeys.self, forKey: .name)
firstName = try name.decode(String.self, forKey: .firstName)
lastName = try name.decode(String.self, forKey: .lastName)
let location = try results.nestedContainer(keyedBy: CodingKeys.self, forKey: .location)
let street = try location.decode(String.self, forKey: .street)
let city = try location.decode(String.self, forKey: .city)
let postcode = try location.decode(String.self, forKey: .postcode)
address = street + ", " + city + ", " + postcode
email = try results.decode(String.self, forKey: .email)
let pictures = try results.nestedContainer(keyedBy: CodingKeys.self, forKey: .pictures)
pictureURL = try pictures.decode(String.self, forKey: .pictureURL)
}
Это дефектная строка:
let results = try container.nestedContainer(keyedBy: CodingKeys.self, forKey: .results)
Вот полная ошибка:
typeMismatch(Swift.Dictionary<Swift.String, Any>, Swift.DecodingError.Context(codingPath: [], debugDescription: "Expected to decode Dictionary<String, Any> but found an array instead.", underlyingError: nil))
Я думаю, что это связано со структурой JSON, который представляет собой массив из 100 элементов под ключевыми «результатами», и я думаю, что проблема может заключаться в том, чтобы сделать их все вместе.
Как мне справиться с этим?