> Как справиться с JSON, если поля не совпадают со структурой в Swift (iOS, Swift)

Уровень: senior · Роль: mobile · Категория: Технические вопросы

Компании: Лингуа Лео

Стек: iOS, Swift

> Пример ответа

В Swift для работы с JSON, поля которого не совпадают со структурой, используется протокол Codable с кастомной реализацией CodingKeys и init(from decoder:). Вот основной подход:

SWIFT
struct User: Codable {
let fullName: String
let age: Int
// Если JSON приходит с snake_case (например, "full_name")
enum CodingKeys: String, CodingKey {
case fullName = "full_name"
case age
}
}
// Если структура не совпадает по типам или наличию полей
struct FlexibleUser: Codable {
let name: String
let 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:

SWIFT
if 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.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью