Инструмент Tool Kumar

JSON в Swift: модели Codable

Генерируйте структуры Swift, реализующие протокол Codable. Конвертер добавляет CodingKeys, когда имена свойств отличаются от ключей JSON, поэтому ключ вроде user-id всё равно декодируется в userId.

Как пользоваться инструментом

  1. Вставьте типичный ответ, включая записи с разным набором полей.
  2. Проверьте сгенерированный код и при необходимости измените имя корня.
  3. Скопируйте или скачайте код, затем сверьте типы с контрактом вашего API.

Пример с разбором

Этот результат создан встроенным конвертером. По двум ценам товаров выводится тип поля с плавающей точкой. Значения null и строка в поле note дают тип, допускающий null.

Ввод

{
  "user-id": 42,
  "profile": {
    "city": "London",
    "created_at": "2026-10-14T09:00:00Z"
  },
  "items": [
    {
      "price": 12,
      "note": null
    },
    {
      "price": 12.5,
      "note": "gift"
    }
  ]
}

Результат

import Foundation

struct Root: Codable {
    let userId: Int
    let profile: Profile
    let items: [Item]

    enum CodingKeys: String, CodingKey {
        case userId = "user-id"
        case profile, items
    }
}

struct Profile: Codable {
    let city: String
    let createdAt: String

    enum CodingKeys: String, CodingKey {
        case city
        case createdAt = "created_at"
    }
}

struct Item: Codable {
    let price: Double
    let note: String?
}

Декодирование с JSONDecoder

Используйте JSONDecoder со сгенерированной структурой Root. Codable также позволяет кодировать ту же модель с помощью JSONEncoder.

Для этого кода оставьте стратегию ключей по умолчанию: его CodingKeys уже содержат исходные имена ключей, включая created_at.

let model = try JSONDecoder().decode(Root.self, from: responseData)
let encoded = try JSONEncoder().encode(model)

Параметры и особые случаи

  • Для целых чисел выводится Int, для дробных — Double, а для целых за пределами диапазона 64-битных целых со знаком — Decimal. Проверьте ограничения целевой платформы и точность десятичных значений.
  • Значения null или отсутствующие поля становятся опциональными свойствами. Для полей, содержащих только null или значения разных типов, при необходимости используется сгенерированный вспомогательный тип JSONValue.
  • JSONValue хранит числа как Double, поэтому для точных денежных сумм или очень больших ID используйте явные типы.
  • Строки с датами остаются String. Если вы замените тип поля на Date, настройте JSONDecoder.dateDecodingStrategy под формат вашего API.

Конфиденциальность по умолчанию

Документ остаётся в этом браузере. Tool Kumar разбирает и конвертирует данные, создаёт файлы для скачивания на вашем устройстве, без регистрации и отправки на сервер.

Вопросы об инструменте «JSON в Swift: модели Codable»

Он генерирует классы или структуры?
Структуры, реализующие протокол Codable, со свойствами let и вложенными типами моделей. Код импортирует Foundation.
Когда добавляются CodingKeys?
Если имя свойства меняется, генерируется перечисление CodingKeys, которое сопоставляет идентификаторы Swift с исходными ключами JSON.
Как обрабатывается null?
Встреченные в примере null и отсутствующие поля дают опциональные свойства. Для неизвестных или смешанных значений используется перечисление JSONValue с Codable, которое добавляется, только если на него есть ссылки.
Можно ли сразу использовать JSONDecoder?
Да. Скопируйте сгенерированные структуры в проект и декодируйте Root.self из Data. Сначала проверьте опциональные поля и типы дат.

Похожие инструменты

JSON в Dart, JSON в Kotlin: data-классы и Генератор JSON Schema.