Codable: кодирование и декодирование JSON
Реализуйте Codable, пользовательские CodingKeys и декодирование вложенных контейнеров.
«Codable: кодирование и декодирование JSON» — бесплатный урок Swift Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
Протокол Codable
Codable — это псевдоним типа для Encodable & Decodable. Типы, соответствующие этому протоколу, можно автоматически кодировать в JSON и декодировать из JSON.
struct User: Codable {
var name: String
var age: Int
}Автоматическая генерация реализации
Swift автоматически генерирует реализации Codable, если все сохраняемые свойства сами соответствуют Codable.
struct Product: Codable {
var id: Int
var title: String
var price: Double
// init(from:) and encode(to:) are auto-generated
}Декодирование JSON
Используйте JSONDecoder, чтобы декодировать Data в тип Decodable.
let json = #"{"name":"Alice","age":30}"#.data(using: .utf8)!
let user = try JSONDecoder().decode(User.self, from: json)
print(user.name) // AliceКодирование в JSON
Используйте JSONEncoder, чтобы закодировать значение Codable в Data.
let user = User(name: "Bob", age: 25)
let data = try JSONEncoder().encode(user)
print(String(data: data, encoding: .utf8)!)Пользовательские CodingKeys
Используйте перечисление CodingKeys для сопоставления имён свойств Swift и ключей JSON.
struct Article: Codable {
var createdAt: Date
enum CodingKeys: String, CodingKey {
case createdAt = "created_at"
}
}Стратегии декодирования дат
Настройте JSONDecoder.dateDecodingStrategy для разбора дат в различных форматах.
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let article = try decoder.decode(Article.self, from: data)Вложенные контейнеры
Декодируйте вложенные объекты JSON, определяя вложенные структуры Codable или используя контейнеры с ключами вручную.
struct Response: Codable {
struct Data: Codable {
var users: [User]
}
var data: Data
}
let resp = try JSONDecoder().decode(Response.self, from: json)Пользовательская логика декодирования
Переопределите init(from:) для нестандартных структур JSON или преобразования данных во время декодирования.
struct Rating: Codable {
var stars: Int
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
let raw = try container.decode(Double.self)
stars = Int(raw.rounded())
}
func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
try container.encode(Double(stars))
}
}keyDecodingStrategy
Используйте .convertFromSnakeCase для автоматического преобразования ключей JSON в формате snake_case в свойства Swift в формате camelCase.
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let user = try decoder.decode(User.self, from: data)
// "first_name" → firstNameПараметры кодирования
Настройте JSONEncoder.outputFormatting для форматирования вывода с отступами или сортировкой.
let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(product)Обработка необязательных полей
Помечайте свойства как необязательные, чтобы корректно обрабатывать отсутствующие ключи JSON без возникновения ошибок.
struct User: Codable {
var name: String
var bio: String? // nil if "bio" key is absent from JSON
}Быстрая проверка
Какая стратегия JSONDecoder автоматически сопоставляет ключи JSON в формате snake_case с именами свойств Swift в формате camelCase?
Итоги урока
Приводите типы к Codable для автоматического кодирования и декодирования JSON. Используйте CodingKeys для переименования свойств, keyDecodingStrategy = .convertFromSnakeCase для API с ключами в формате snake_case, пользовательский init(from:) для нестандартного JSON и dateDecodingStrategy для разбора дат.
Часто задаваемые вопросы
Урок «Codable: кодирование и декодирование JSON» бесплатный?
Да — полный текст урока «Codable: кодирование и декодирование JSON» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «Codable: кодирование и декодирование JSON»?
Реализуйте Codable, пользовательские CodingKeys и декодирование вложенных контейнеров. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Codable: кодирование и декодирование JSON»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- URLSession data(from:) с async/await
- Codable: кодирование и декодирование JSON
- Обработка ошибок и коды состояния HTTP
- Логика повторных попыток и фоновый URLSession