0Pricing
Dart Academy · Урок

json_serializable в действии

Автоматически создавайте сериализацию моделей

«json_serializable в действии» — бесплатный урок Dart Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.

Проблема шаблонного кода для JSON

Писать fromJson и toJson вручную утомительно и чревато ошибками. Пакет json_serializable создаёт оба метода для вас на основе модели. 📦

Добавление пакетов

Вам понадобится json_annotation как обычная зависимость, а json_serializable и build_runner — как зависимости для разработки, необходимые для генерации.

dependencies:
  json_annotation: ^4.9.0

Аннотирование класса

Пометьте модель аннотацией @JsonSerializable. Эта аннотация указывает генератору создать код сериализации для данного класса.

@JsonSerializable()
class User {
  final String name;
  User(this.name);
}

Объявление файла части

Добавьте директиву part, чтобы ваш файл мог подключить сгенерированные вспомогательные функции. Его имя повторяет имя вашего файла с суффиксом .g.dart.

part 'user.g.dart';

Подключение fromJson

Добавьте фабричный конструктор, который вызывает сгенерированную функцию. Вспомогательная функция _$UserFromJson будет создана сборщиком автоматически.

factory User.fromJson(Map<String, dynamic> j) =>
    _$UserFromJson(j);

Подключение toJson

Добавьте метод, вызывающий сгенерированный преобразователь. Вспомогательная функция _$UserToJson превращает ваш объект обратно в карту JSON.

Map<String, dynamic> toJson() => _$UserToJson(this);

Генерация кода

Один раз запустите build_runner, и появится файл user.g.dart с полностью реализованными вспомогательными функциями, готовыми к использованию.

dart run build_runner build

Переименование ключа JSON

Если имя поля в API отличается от имени в Dart, используйте @JsonKey для сопоставления. Ваш код останется чистым, а JSON будет соответствовать серверу.

@JsonKey(name: 'full_name')
final String fullName;

Задание значения по умолчанию

Вы можете указать значение для отсутствующих полей. Параметр defaultValue подставляет значение, если ключ отсутствует в JSON.

@JsonKey(defaultValue: 0)
final int score;

Вложенные модели работают автоматически

Если поле является другим классом с аннотацией @JsonSerializable, генератор рекурсивно сериализует его. Для вложенных объектов не требуется никаких дополнительных действий.

Использование как обычного Dart-кода

После генерации вы разбираете и кодируете данные обычными вызовами методов. Сгенерированные вспомогательные функции скрыты, поэтому места их вызова выглядят естественно.

final u = User.fromJson(data);
final back = u.toJson();

Быстрая проверка

Какая аннотация помечает класс для генерации кода JSON?

Итоги

Добавьте аннотацию @JsonSerializable, подключите fromJson и toJson, затем запустите build_runner. Используйте @JsonKey для сопоставления имён полей и задания значений по умолчанию. 🎉

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

Урок «json_serializable в действии» бесплатный?

Да — полный текст урока «json_serializable в действии» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.

Чему я научусь в уроке «json_serializable в действии»?

Автоматически создавайте сериализацию моделей Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Dart Academy?

Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «json_serializable в действии»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Dart Academy?

Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Встроенные аннотации: override, deprecated
  2. Написание собственных аннотаций
  3. Генерация кода с build_runner
  4. json_serializable в действии
← Назад к Dart Academy