> Как справиться с JSON, если поля не совпадают со структурой в Swift (iOS, Swift)
Уровень: senior · Роль: mobile · Категория: Технические вопросы
Компании: Лингуа Лео
Стек: iOS, Swift
> Пример ответа
В Swift для работы с JSON, поля которого не совпадают со структурой, используется протокол Codable с кастомной реализацией CodingKeys и init(from decoder:). Вот основной подход:
SWIFTstruct User: Codable {let fullName: Stringlet age: Int// Если JSON приходит с snake_case (например, "full_name")enum CodingKeys: String, CodingKey {case fullName = "full_name"case age}}// Если структура не совпадает по типам или наличию полейstruct FlexibleUser: Codable {let name: Stringlet age: Int?let email: String?init(from decoder: Decoder) throws {let container = try decoder.container(keyedBy: CodingKeys.self)name = try container.decode(String.self, forKey: .name)age = try container.decodeIfPresent(Int.self, forKey: .age) // опциональное полеemail = try container.decodeIfPresent(String.self, forKey: .email)}}
Для сложных случаев, когда JSON динамический или нестандартный, можно использовать JSONSerialization:
SWIFTif let data = jsonString.data(using: .utf8),let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] {let name = json["user_name"] as? String ?? json["name"] as? String// ручная обработка}
Также полезно использовать JSONDecoder с настройками: keyDecodingStrategy = .convertFromSnakeCase для автоматического преобразования snake_case в camelCase.
> Похожие задачи по mobile
Почему предпочтительнее использовать Dependency Injection вместо создания объектов вручную
Что такое Set, его особенности, зачем нужен и какие есть реализации
Что такое Map и Set в JavaScript
Работали ли с подписками и покупками через StoreKit или другие сервисы
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью