Конвертер JSON в Dart
Создавайте не требующие зависимостей классы моделей Dart из объекта JSON или массива объектов-образцов. Конвертер объединяет все элементы образца, создаёт вложенные классы, сохраняет исходные ключи JSON и формирует корректные null-безопасные типы полей с фабричным конструктором fromJson. Если нужен результат, совместимый с jsonEncode, добавьте методы toJson. Образец и созданный код остаются в этом браузере, не загружаются на сервер и не добавляются в URL.
Как это работает
-
1
Вставьте репрезентативный образец
Используйте один объект JSON или массив объектов. Несколько элементов помогают выявить отсутствующие и nullable-поля, а также поля со смешанными типами.
-
2
Выберите параметры Dart
Задайте имя корневого класса, решите, делать ли все поля nullable, и при необходимости добавьте методы toJson.
-
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. Сравнивайте токены, синтаксис движков, якоря, группы, проверки и флаги.
Инструмент доступен на других языках
- JSON till Dart-konverterare [SV]
- محول JSON إلى Dart [AR]
- Convertisseur JSON vers Dart [FR]
- Konverter JSON ke Dart [ID]
- JSON-in-Dart-Konverter [DE]
- JSON to Dart 변환기 [KO]
- JSON-naar-Dart-converter [NL]
- JSONからDartへの変換ツール [JA]
- ตัวแปลง JSON เป็น Dart [TH]
- Konwerter JSON na Dart [PL]
- Conversor de JSON a Dart [ES]
- Trình chuyển JSON sang Dart [VI]
- Conversor de JSON para Dart [PT]
- JSON to Dart Converter [EN]
- Convertitore da JSON a Dart [IT]
- JSON'dan Dart'a Dönüştürücü [TR]
- JSON 转 Dart 工具 [ZH]