0Pricing
Swift Academy · Урок

Кодирование с помощью JSONEncoder

Создавайте данные JSON из значений Swift.

«Кодирование с помощью JSONEncoder» — бесплатный урок Swift Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Создание JSONEncoder

JSONEncoder — основной инструмент, который превращает любое значение Encodable в JSON Data. Создайте его, а затем вызовите для своего значения encode(_:).

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
}

let encoder = JSONEncoder()
let data = try encoder.encode(Movie(title: "Up", year: 2009))
print(data.count, "bytes")

От Data к читаемой строке

encode(_:) возвращает двоичные Data. Чтобы прочитать их, декодируйте байты как UTF-8 с помощью String(data:encoding:).

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
}

let data = try JSONEncoder().encode(Movie(title: "Up", year: 2009))
let text = String(data: data, encoding: .utf8)!
print(text)

Форматированный вывод

По умолчанию JSON имеет компактный вид. Установите outputFormatting = .prettyPrinted, чтобы добавить отступы и переводы строк и сделать результат удобным для чтения.

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
}

let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try encoder.encode(Movie(title: "Up", year: 2009))
print(String(data: data, encoding: .utf8)!)

Сортировка ключей для стабильного вывода

Объединяйте параметры в массив. Добавление .sortedKeys сортирует ключи по алфавиту, благодаря чему вывод становится детерминированным — это особенно удобно для тестов и снимков состояния.

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
    var rating: Double
}

let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(Movie(title: "Up", year: 2009, rating: 4.8))
print(String(data: data, encoding: .utf8)!)

Кодирование массивов

Коллекции можно кодировать напрямую. Массив значений Encodable превращается в массив JSON.

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
}

let list = [Movie(title: "Up", year: 2009),
            Movie(title: "Coco", year: 2017)]
let data = try JSONEncoder().encode(list)
print(String(data: data, encoding: .utf8)!)

Кодирование словарей

Словарь [String: Encodable-element] кодируется в объект JSON. Обратите внимание: порядок ключей не гарантируется, если не добавить .sortedKeys.

import Foundation

let scores: [String: Int] = ["alice": 90, "bob": 75]
let encoder = JSONEncoder()
encoder.outputFormatting = .sortedKeys
let data = try encoder.encode(scores)
print(String(data: data, encoding: .utf8)!)

Кодирование вложенных структур

Вложенные типы Codable кодируются рекурсивно, автоматически создавая вложенные объекты JSON.

import Foundation

struct Author: Codable { var name: String }
struct Post: Codable {
    var title: String
    var author: Author
}

let p = Post(title: "Hello", author: Author(name: "Mae"))
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
print(String(data: try encoder.encode(p), encoding: .utf8)!)

Повторное использование кодировщика

Настроенный JSONEncoder можно повторно использовать для множества значений. Настройте его один раз и применяйте одинаковое форматирование во всём коде.

import Foundation

struct Tag: Codable { var name: String }

let encoder = JSONEncoder()
encoder.outputFormatting = .sortedKeys
for t in [Tag(name: "swift"), Tag(name: "json")] {
    let data = try encoder.encode(t)
    print(String(data: data, encoding: .utf8)!)
}

Кодирование чисел и логических значений

Числовые свойства и логические значения кодируются как литералы JSON — без кавычек. Строки заключаются в кавычки, а Int, Double и Bool — нет.

import Foundation

struct Stats: Codable {
    var count: Int
    var ratio: Double
    var enabled: Bool
}

let data = try JSONEncoder().encode(Stats(count: 3, ratio: 0.75, enabled: true))
print(String(data: data, encoding: .utf8)!)

Кодирование опциональных значений

По умолчанию опциональное значение nil полностью исключается из JSON. Опциональное значение, отличное от nil, кодируется как обёрнутое в нём значение.

import Foundation

struct Item: Codable {
    var name: String
    var note: String?
}

let data = try JSONEncoder().encode(Item(name: "Pen", note: nil))
print(String(data: data, encoding: .utf8)!)

Объединяем всё вместе

Типичный процесс кодирования выглядит так: создайте значение, настройте кодировщик, вызовите encode, а затем преобразуйте Data в String для журналирования или передачи.

import Foundation

struct Order: Codable {
    var id: Int
    var items: [String]
}

let order = Order(id: 42, items: ["a", "b"])
let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(order)
print(String(data: data, encoding: .utf8)!)

Быстрая проверка: JSONEncoder

Проверьте свои знания о кодировании.

Повторение: кодирование с помощью JSONEncoder

Вы научились превращать значения Swift в JSON:

  • encode(_:) возвращает Data; преобразуйте их с помощью String(data:encoding:).
  • Параметр outputFormatting со значениями .prettyPrinted и .sortedKeys управляет оформлением.
  • Массивы, словари, вложенные типы, числа, логические значения и опциональные значения кодируются предсказуемым образом.
  • Настроенный кодировщик можно повторно использовать для множества значений.

Часто задаваемые вопросы

Урок «Кодирование с помощью JSONEncoder» бесплатный?

Да — полный текст урока «Кодирование с помощью JSONEncoder» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Кодирование с помощью JSONEncoder»?

Создавайте данные JSON из значений Swift. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Кодирование с помощью JSONEncoder»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Соответствие Codable
  2. Кодирование с помощью JSONEncoder
  3. Декодирование с помощью JSONDecoder
  4. Работа с необязательными и вложенными типами
← Назад к Swift Academy