Генерация типов

JSON в SwiftМодели по реальным ответам API

Сравните две записи: отсутствие ключа влияет на опциональность свойства.

JSON в Swift

Входной JSON

Разбор и генерация выполняются в этом браузере. Входные данные не отправляются и не сохраняются.

Созданный код

Параметры генерации

Int64 / Decimal; проверено в Swift 6.3.1, macOS 26. Используйте makeJSONDecoder() и проверьте целевую ОС.

Корневой массив задаёт элемент Root; декодируйте [Root].self.

Структур: 2 · опциональных свойств: 2

JSON в Swift помогает подготовить модель по примерам API. Добавьте записи с отсутствующими ключами: один полностью заполненный объект не показывает, какие поля могут пропадать.

Этот конвертер JSON в Swift создаёт структуры Swift и CodingKeys как основу для проекта. Наблюдаемые типы не заменяют требования протокола, бизнес-проверки и будущие варианты ответа.

Зачем использовать JSON в Swift?

Учитывать все записи

JSON в Swift объединяет объекты в одной позиции массива. Отсутствующий ключ или null делает свойство опциональным; постоянно присутствующее значение сохраняет конкретный тип.

Две карточки объектов объединяются в модель, а пустой слот обозначает опциональное поле.

Управлять распознаванием дат

По умолчанию временные отметки остаются строками. Режим ISO связывает только корректные полные даты с Date и подходящим декодером, сохраняя остальные строки.

Карточка времени разделяется на сохранённую строку и выбранный путь к часам.

Определите правила чтения

01

Соберите разные примеры

Корень должен быть объектом или непустым массивом объектов. Для массива создаётся модель элемента Root: декодируйте [Root].self. Вложенные массивы тоже объединяют все элементы.

02

Проверьте имена и время

Сохраняйте CodingKeys для snake_case и необычных ключей. Выберите camelCase или сохранение допустимых имён. Для ISO нужны часовой пояс и не более трёх знаков дробной части секунды.

03

Подтвердите замену

Автогенерация ждёт 350 мс после правки. Отключите её для кнопки или Ctrl/Cmd+Enter. Любое изменение сразу блокирует устаревший экспорт. Пример и очистка показывают число символов перед применением; затем доступна одна отмена.

Что входит в исходный код

Связанные структуры в одном файле

JSON в Swift создаёт свойства var и структуры Codable. Непустые вложенные объекты получают вспомогательные модели, пустые становятся словарями, смешанные значения используют собственный рекурсивный enum JSONValue вместо Any.

Числа из исходных токенов

Группы целочисленных записей в знаковом 64-битном диапазоне используют Int64. Десятичные, экспоненциальные записи, большие целые и содержащие их числовые группы получают Foundation.Decimal. Промежуточного JavaScript Number нет.

Явная семантика Optional

Режим наблюдения учитывает отсутствующие ключи и null; общий режим делает все свойства опциональными. Синтезированный Codable читает оба случая как nil и обычно пропускает такие свойства при кодировании. Различие между ними не сохраняется.

Настроенный декодер

makeJSONDecoder() оставляет стандартную стратегию ключей. При наличии Date он пробует ISO8601DateFormatter с дробными секундами и без них. Чтобы снова получить ISO-текст, отдельно настройте стратегию дат JSONEncoder.

Границы перед интеграцией

Не полноценная схема
Нет обработки JSON Schema, OpenAPI, угадывания enum, генерации class, Core Data, SwiftData или сетевого кода. Неизвестные ключи игнорируются при синтезированном декодировании. Календарная проверка при выводе типа не делает экспортированный помощник бизнес-валидатором.
Консервативный числовой бюджет
До 38 значащих цифр после удаления начальных и конечных нулей; исходный показатель степени от −128 до 127; показатель минус число десятичных знаков не ниже −128; нормализованный порядок не выше 127. Проверяются и смешанные значения, и исходная запись нуля.
Проверяйте целевую ОС
Компиляция и числовой цикл проверены в Swift 6.3.1 на macOS 26, также в языковом режиме Swift 5, а не старым компилятором. Старый Foundation может терять точность Decimal. Повторите проверку на целевой системе. Запись 1.0 вместо 1e0 не сохраняется.
Date хранит момент времени
Нужны корректная полная дата, пояс и до трёх дробных знаков секунды; все строки кроме null в этой позиции должны соответствовать. Только дата, время без пояса, некорректные и более точные строки остаются String. Исходный пояс и формат теряются. Распознаются годы 1583–9999; более ранние даты остаются String из-за исторических сдвигов календаря. Помощник также отклоняет годы до 1583.
Ключи должны различаться
Без CodingKeys любое необходимое переименование приводит к ошибке. Зарезервированные слова, конфликты и свойство CodingKeys переименовываются. Одиночные суррогаты в ключах или значениях и разные NFC-эквивалентные ключи в объекте или объединённой модели отклоняются.
Строгий ввод с ограничениями
Нет комментариев, завершающих запятых, повторных ключей, исправления, импорта файлов, URL-запросов и запуска Swift в браузере. Лимиты: 500 000 символов, 50 000 узлов, глубина 40, 100 полей на объединённый объект, 200 структур, 1 000 символов на ключ/число и 1 000 000 в выводе.

Вопросы о JSON в Swift

Содержит ли созданный код протокол Codable?

Да. Все структуры реализуют Codable, а смешанные значения представлены совместимым рекурсивным enum. JSON в Swift добавляет makeJSONDecoder(); используйте Root.self или [Root].self и оставьте стандартную стратегию ключей.

Какие структуры JSON поддерживаются?

В корне принимается объект или непустой массив только из объектов. Вложенные объекты получают вспомогательные структуры, массивы объединяют все элементы. Для пустых объектов и смешанных значений используются более общие типы.

Почему свойство становится опциональным?

Ключ отсутствует в другом примере или содержит null. Можно также включить опциональность для всех свойств. Codable читает оба случая как nil и обычно пропускает их при кодировании; три состояния требуют собственной реализации.

Как обрабатываются вложенные объекты JSON?

Непустой объект становится отдельной структурой в том же файле. Для массивов учитываются все элементы, а не только первый. Пустой объект становится словарём, неоднородные значения — рекурсивным JSONValue.

Как декодировать Decimal без потери точности числа?

Генератор сохраняет исходные токены и выбирает Int64 либо Decimal в указанном бюджете. Независимое десятичное сравнение выполнено на Swift 6.3.1/macOS 26. Foundation менялся между версиями ОС, поэтому повторите числовые тесты на системе развёртывания.

Нашли случай для улучшения типов?

Проверьте модель на разных ответах

Используйте JSON в Swift с пропущенными ключами, null и реальными числами. Скомпилируйте скачанный файл и проверьте декодирование в целевой среде.