Конвертер JSON в Dart

Шаг 1 / 333%

Создавайте не требующие зависимостей классы моделей Dart из объекта JSON или массива объектов-образцов. Конвертер объединяет все элементы образца, создаёт вложенные классы, сохраняет исходные ключи JSON и формирует корректные null-безопасные типы полей с фабричным конструктором fromJson. Если нужен результат, совместимый с jsonEncode, добавьте методы toJson. Образец и созданный код остаются в этом браузере, не загружаются на сервер и не добавляются в URL.

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

  1. 1

    Вставьте репрезентативный образец

    Используйте один объект JSON или массив объектов. Несколько элементов помогают выявить отсутствующие и nullable-поля, а также поля со смешанными типами.

  2. 2

    Выберите параметры Dart

    Задайте имя корневого класса, решите, делать ли все поля nullable, и при необходимости добавьте методы toJson.

  3. 3

    Проверьте и экспортируйте

    Просмотрите выведенные классы, затем скопируйте код или скачайте локальный файл models.dart.

Как JSON превращается в null-безопасные модели Dart

В официальной документации dart:convert указано, что jsonDecode() создаёт совместимые с JSON значения: числа, строки, логические значения, null, списки и карты со строковыми ключами. Класс модели нельзя напрямую закодировать в JSON, но jsonEncode() может вызвать его метод toJson(). Этот конвертер создаёт такую схему ручной сериализации без аннотаций json_serializable и зависимостей от пакетов.

Предположим, что образец содержит пользователя с вложенным адресом. Созданный User получит поля final и конструктор с именованными параметрами. User.fromJson(Map<String, Object?> json) приводит скалярные значения к нужным типам и вызывает UserAddress.fromJson() для вложенного объекта. Если address отсутствует или равен null хотя бы в одном объекте образца, его тип становится UserAddress?, а фабричный конструктор проверяет null перед созданием объекта. При включённом toJson вложенные модели рекурсивно преобразуются в карты, которые принимает jsonEncode().

Наблюдаемое значение JSON Созданный тип Dart
Целое число int
Дробное число double
Целые и дробные образцы num
Текст String
Логическое значение bool
Вложенный объект Созданный класс модели
Однородный массив List<T>
Пустой или несовместимый вложенный массив List<Object?>
Только null или конфликтующие значения Object?

Конвертер проверяет каждый объект корневого массива, а не только первый элемент. Поле становится nullable, если оно отсутствует в одном из элементов или явно равно null. Можно также сделать nullable все поля, если реальный API менее предсказуем, чем образец. В руководстве Dart по null safety отмечено, что по умолчанию типы не допускают null, а для его приёма нужен знак ?.

Обработка идентификаторов и ограничения вывода типов

Ключи JSON не обязаны быть допустимыми именами членов Dart. Знаки пунктуации удаляются, слова преобразуются в lowerCamelCase, зарезервированные слова получают безопасный суффикс, а совпадающие имена получают стабильные числовые суффиксы. Исходный ключ остаётся неизменным в json['original-key'] и карте toJson(). Имена вложенных классов используют полный путь, поэтому несвязанные объекты адресов не объединяются незаметно в один класс.

Один образец не может подтвердить весь контракт API. Строки JSON не распознаются автоматически как даты, UUID или enum, а пустой массив не сообщает тип элемента. Повторяющиеся имена членов объекта также небезопасны для преобразования туда и обратно: парсеры JSON обычно сохраняют последнее значение. Перед использованием в production сравните созданные модели с документацией или схемой API. Инструмент ограничивает размер входных данных, глубину вложенности, число выведенных объявлений и размер результата, чтобы нагрузка на браузер оставалась контролируемой.

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

Нет. Разбор, вывод типов, генерация кода, копирование и скачивание выполняются в браузере. JSON и созданный код Dart не отправляются через наши серверы и не помещаются в URL.

Да. Flutter использует Dart, поэтому эти не требующие зависимостей классы подходят для проекта Flutter. Сначала сравните выведенные типы с реальным контрактом API.

Нет. Он создаёт ручной fromJson и необязательные методы toJson без зависимости от пакета или build_runner.

Поле, которое встречается со значением null или отсутствует, становится nullable. Если образец не отражает реальные данные, можно сделать nullable все создаваемые поля.

Нет. Результат отражает только встреченные значения. Используйте несколько объектов-образцов и сравните результат со схемой или документацией поставщика.

Сопутствующие инструменты

Справочная таблица ASCII

Полная таблица ASCII от 0 до 127 с десятичным, шестнадцатеричным, восьмеричным и двоичным представлением, а также записью числовых ссылок HTML, включая NUL, LF и DEL.

Справочник сочетаний клавиш

Ищите документированные сочетания по умолчанию для VS Code, Chrome и Bash с GNU Readline в macOS, Windows и Linux.

Справочник символов HTML

Справочник HTML-сущностей с поиском, их именованными и числовыми кодами, а также копированием специальных символов и знаков одним кликом.

Шпаргалка по Markdown

Практический справочник Markdown с настоящим предпросмотром и готовыми для копирования примерами заголовков, списков, таблиц, кода, ссылок, изображений и синтаксиса GFM.

Счетчик FPS

Измерьте FPS браузера через requestAnimationFrame: сглаживание, минимальная и максимальная частота кадров, порог предупреждения и график по желанию. Работает локально, без загрузок и API.

Шпаргалка по регулярным выражениям

Поисковый справочник регулярных выражений для JavaScript, PCRE2/PHP, Python re и .NET. Сравнивайте токены, синтаксис движков, якоря, группы, проверки и флаги.

Инструмент доступен на других языках