Помогите пожалуйста разобраться и понять парсинг JSON
Задача стоит получить необходимы данные с сайта https://randomuser.me/api/ и запихнуть в таблицу
Основной проблемой для себя я вижу непонимание как сформировать структуры и ими пользоваться при парсинге. Вот что у меня получилось, но выдает ошибку typeMismatch, на что документация говорит Неправильный тип получаемых данных.
Структуры
struct Welcome: Codable {
let results: [Result]?
let info: Info?
}
struct Info: Codable {
let seed: String?
let results, page: Int?
let version: String?
}
struct Result: Codable {
let gender: String?
let name: Name?
let location: Location?
let email: String?
let login: Login?
let dob, registered: Dob?
let phone, cell: String?
let id: ID?
let picture: Picture?
let nat: String?
}
struct Dob: Codable {
let date: Date?
let age: Int?
}
struct ID: Codable {
let name, value: String?
}
struct Location: Codable {
let street, city, state: String?
let postcode: Int?
let coordinates: Coordinates?
let timezone: Timezone?
}
struct Coordinates: Codable {
let latitude, longitude: String?
}
struct Timezone: Codable {
let offset, description: String?
}
struct Login: Codable {
let uuid, username, password, salt: String?
let md5, sha1, sha256: String?
}
struct Name: Codable {
let title, first, last: String?
}
struct Picture: Codable {
let large, medium, thumbnail: String?
}
Парсинг
let jsonUrlString = “https://randomuser.me/api/”
guard let url = URL(string: jsonUrlString) else { return }
URLSession.shared.dataTask(with: url) { (data, response, err) in
guard let data = data else { return }
do {
let json = try JSONDecoder().decode(Welcome.self, from: data)
print(json)
} catch DecodingError.dataCorrupted(let context) {
print(DecodingError.dataCorrupted(context))
} catch DecodingError.keyNotFound(let key, let context) {
print(DecodingError.keyNotFound(key,context))
} catch DecodingError.typeMismatch(let type, let context) {
print(DecodingError.typeMismatch(type,context))
} catch DecodingError.valueNotFound(let value, let context) {
print(DecodingError.valueNotFound(value,context))
} catch let error{
print(error)
}
}
.resume()
Ошибка
typeMismatch(Swift.Double, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: “results”, intValue: nil), _JSONKey(stringValue: “Index 0”, intValue: 0), CodingKeys(stringValue: “dob”, intValue: nil), CodingKeys(stringValue: “date”, intValue: nil)], debugDescription: “Expected to decode Double but found a string/data instead.”, underlyingError: nil))