Dart:
Работа с JSON

Как это сделать:

Dart предоставляет встроенную поддержку для JSON с библиотекой dart:convert, что упрощает кодирование и декодирование JSON. Ниже приведены примеры, демонстрирующие основные операции:

Преобразование строки JSON в объект Dart:

import 'dart:convert';

void main() {
  // Пример строки JSON
  String jsonString = '{"name": "John", "age": 30, "email": "[email protected]"}';
  
  // Декодирование JSON в карту Dart
  Map<String, dynamic> user = jsonDecode(jsonString);
  
  print('Привет, ${user['name']}! Тебе ${user['age']} лет.');
  // Вывод: Привет, John! Тебе 30 лет.
}

Кодирование объекта Dart в строку JSON:

import 'dart:convert';

void main() {
  // Пример объекта Dart
  Map<String, dynamic> user = {
    'name': 'Jane',
    'age': 25,
    'email': '[email protected]'
  };
  
  // Кодирование карты Dart в JSON
  String jsonString = jsonEncode(user);
  
  print(jsonString);
  // Вывод: {"name":"Jane","age":25,"email":"[email protected]"}
}

Использование json_serializable для сложных моделей: Для сложных моделей данных ручная сериализация может быть обременительной. Пакет json_serializable автоматизирует этот процесс. Он требует дополнительной настройки, включая добавление зависимостей в ваш pubspec.yaml и создание файлов сборки. После настройки его можно использовать следующим образом:

  1. Определите модель с аннотациями:
import 'package:json_annotation/json_annotation.dart';

part 'user.g.dart';

@JsonSerializable()
class User {
  String name;
  int age;
  String email;
  
  User({required this.name, required this.age, required this.email});
  
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}
  1. Сгенерируйте вспомогательный код сериализации: Используйте команду сборщика для создания файла user.g.dart:
flutter pub run build_runner build
  1. Используйте вашу модель:
void main() {
  // Преобразование JSON в User
  Map userMap = jsonDecode('{"name": "John", "age": 30, "email": "[email protected]"}');
  User user = User.fromJson(userMap);
  
  print('Пользователь: ${user.name}, Возраст: ${user.age}');
  // Вывод: Пользователь: John, Возраст: 30

  // Преобразование User обратно в JSON
  String jsonString = jsonEncode(user.toJson());
  print(jsonString);
  // Вывод: {"name":"John","age":30,"email":"[email protected]"}
}

Эти примеры иллюстрируют базовое и продвинутое взаимодействие с JSON в Dart, давая разработчикам возможность без труда выполнять задачи по сериализации данных в своих приложениях.