Простая сериализация JSON в Dart: руководство по преобразованию списков объектов

Работа с данными JSON — важная часть современной разработки программного обеспечения. В Dart, популярном языке программирования для создания кроссплатформенных приложений, вы часто можете столкнуться со сценариями, когда вам нужно преобразовать список объектов в JSON. В этой статье блога мы рассмотрим несколько методов простой сериализации списков объектов Dart в формат JSON. Мы предоставим примеры кода и объясним каждый подход в разговорной форме, чтобы вам было легче его понять и реализовать в своих проектах.

Метод 1: сериализация вручную

Один простой способ преобразовать список объектов в JSON — это вручную сериализовать каждый объект с помощью встроенного метода toJsonDart. Этот метод позволяет вам определить собственную логику сериализации для каждого объекта. Вот пример:

class Person {
  String name;
  int age;
  Map<String, dynamic> toJson() {
    return {
      'name': name,
      'age': age,
    };
  }
}
void main() {
  List<Person> people = [
    Person(name: 'John', age: 25),
    Person(name: 'Alice', age: 30),
  ];
  List<Map<String, dynamic>> jsonList = [];

  for (var person in people) {
    jsonList.add(person.toJson());
  }
  String jsonString = jsonEncode(jsonList);

  print(jsonString);
}

В этом примере мы определяем метод toJsonвнутри класса Person, который преобразует свойства объекта в карту ключ-значение. Затем мы перебираем каждый объект в списке и вызываем toJson(), чтобы получить представление JSON. Наконец, мы кодируем полученный список карт с помощью функции jsonEncode.

Метод 2: использование пакета json_serializable

Если у вас большое количество объектов или вы хотите автоматизировать процесс сериализации, вы можете использовать пакет json_serializable. Этот пакет генерирует для вас код сериализации на основе аннотаций. Чтобы использовать пакет, выполните следующие действия:

  1. Добавьте зависимости json_annotationи json_serializableв файл pubspec.yaml:
dependencies:
  json_annotation: ^4.4.0
dev_dependencies:
  build_runner: ^2.1.4
  json_serializable: ^4.1.3
  1. Запустите flutter pub get, чтобы получить зависимости.

  2. Добавьте аннотацию к классу объектов с помощью @JsonSerializableи запустите генерацию кода:

import 'package:json_annotation/json_annotation.dart';
part 'person.g.dart';
@JsonSerializable()
class Person {
  String name;
  int age;
  Person({required this.name, required this.age});
  factory Person.fromJson(Map<String, dynamic> json) =>
      _$PersonFromJson(json);
  Map<String, dynamic> toJson() => _$PersonToJson(this);
}
  1. Сгенерируйте код сериализации, выполнив следующую команду в каталоге проекта:
flutter pub run build_runner build
  1. После завершения генерации кода вы можете сериализовать список объектов в JSON, используя сгенерированные методы:
import 'package:json_annotation/json_annotation.dart';
void main() {
  List<Person> people = [
    Person(name: 'John', age: 25),
    Person(name: 'Alice', age: 30),
  ];
  String jsonString = jsonEncode(people);
  print(jsonString);
}

Метод 3: использование библиотеки dart:convert

Встроенная библиотека dart:convertDart предоставляет простой способ преобразования объектов в JSON с помощью функции jsonEncode. Этот подход не требует каких-либо дополнительных зависимостей или генерации кода. Вот пример:

import 'dart:convert';
class Person {
  String name;
  int age;
  Person({required this.name, required this.age});
}
void main() {
  List<Person> people = [
    Person(name: 'John', age: 25),
    Person(name: 'Alice', age: 30),
  ];
  List<Map<String, dynamic>> jsonList = people.map((p) => p.toJson()).toList();
  String jsonString = jsonEncode(jsonList);
  print(jsonString);
}

В этом примере мы определяем класс Personаналогично методу 1. Однако вместо явного вызова toJson()мы используем mapфункция для преобразования каждого объекта в представление карты. Наконец, мы кодируем полученный список карт в строку JSON, используя jsonEncode.

В этой статье мы рассмотрели три различных метода преобразования списка объектов в JSON в Dart. Вы можете выбрать тот, который лучше всего соответствует требованиям вашего проекта. Предпочитаете ли вы сериализацию вручную, используя пакет json_serializableили используя встроенный в Dart `конвертировать список объектов в JSON в Dart, сериализацию Dart JSON, примеры кода Dart, кодирование JSON в Dart, программирование Dart, Библиотеки Dart JSON