Генератор Codable-структур Swift из JSON

Вставьте ответ API в JSON и получите структуры Swift, которые разбираются через JSONDecoder. Ключи становятся свойствами в camelCase, а структура, где ключи отличаются от имён, получает enum CodingKeys с точными именами из JSON. Значения, которые бывают null или отсутствуют, становятся опционалами.

Свойства

Работает в браузере: всё, что вы вводите, никуда не отправляется.

Как пользоваться

  1. Вставьте реалистичный пример JSON; несколько элементов в массиве помогают найти необязательные ключи.
  2. Выберите неизменяемые свойства let или var.
  3. Скопируйте код в файл .swift и разбирайте так: try JSONDecoder().decode(Root.self, from: data).

Как это работает

Пример разбирается в «форму»: каждый ключ со всеми встреченными там типами. Все объекты одного массива становятся одной структурой, поэтому ключ, который есть не везде, становится опциональным. Codable разбирает отсутствующий опциональный ключ как nil.

  • Имена свойств — camelCase: order_id → orderId; ключевое слово Swift, например default, пишется в обратных кавычках.
  • Имена структур берутся из ключей: items хранит [Item], customer становится Customer.
  • Массив на верхнем уровне даёт typealias, например typealias Root = [RootItem].

Пример

{"line_items":[{"sku":"A","note":null,"qty":1},{"sku":"B","note":"x"}]} с var даёт:

import Foundation

struct Root: Codable {
    var lineItems: [LineItem]

    enum CodingKeys: String, CodingKey {
        case lineItems = "line_items"
    }
}

struct LineItem: Codable {
    var sku: String
    var note: String?
    var qty: Int?
}

Советы

  • Даты приходят строками: поменяйте тип на Date и задайте decoder.dateDecodingStrategy (например, .iso8601), если хотите их разбирать.
  • Соответствие Identifiable или Hashable для SwiftUI добавьте сами.
  • Модели того же JSON для Kotlin или TypeScript делают соседние генераторы.

Частые вопросы

Как типы JSON сопоставляются со Swift?

Строки становятся String, true и false — Bool, целые числа — Int, остальные — Double (смесь — Double). Массивы становятся [T], объекты — отдельными Codable-структурами, а null или ключ, которого нет в части объектов, делают свойство опциональным (T?).

Когда добавляется enum CodingKeys?

Когда хотя бы одно имя свойства отличается от ключа JSON, например orderId для order_id. Тогда Swift нужен case для каждого свойства, поэтому enum перечисляет все, а имя из JSON указано только там, где оно другое.

Что такое JSONValue?

В Codable нет встроенного типа «любой JSON». Если на одном месте встречаются значения разных видов, генератор использует небольшой enum JSONValue (string, number, bool, object, array, null) и добавляет его код в конец.

Можно обойтись convertFromSnakeCase?

Да: с decoder.keyDecodingStrategy = .convertFromSnakeCase enum CodingKeys для ключей в snake_case можно удалить. Оставьте их, если ключи в другом стиле, например first-name, — такие стратегия не преобразует.

Ещё в разделе «Разработчикам»

Все инструменты раздела: Разработчикам ·Обновлено 4 ноября 2026 г.

Настройки конфиденциальности

Google Analytics показывает нам, какими инструментами пользуются и работают ли они. Он может ставить cookie. Ваш выбор сохраняется в этом браузере.