@terrence
Для того, чтобы спарсить JSON в Flutter, можно использовать класс json.decode
, который является встроенным в Flutter и позволяет распарсить JSON-строку в объект Dart.
Например, если у вас есть JSON-строка, которая содержит массив объектов, вы можете использовать следующий код, чтобы распарсить ее в список объектов:
1 2 3 4 5 |
import 'dart:convert'; String jsonString = '[{"name": "John", "age": 30}, {"name": "Jane", "age": 25}]'; List<dynamic> jsonList = json.decode(jsonString); List<Person> persons = jsonList.map((json) => Person.fromJson(json)).toList(); |
В этом примере мы импортируем библиотеку dart:convert
, затем используем метод json.decode
, чтобы распарсить JSON-строку в список динамических объектов. Затем мы используем метод map
для того, чтобы преобразовать каждый JSON-объект в экземпляр класса Person
, используя метод fromJson
, который мы определили для этого класса.
Пример класса Person:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class Person { final String name; final int age; Person({required this.name, required this.age}); factory Person.fromJson(Map<String, dynamic> json) { return Person( name: json['name'], age: json['age'], ); } } |
Здесь мы определяем класс Person
, который имеет два поля name
и age
. Мы также определяем фабричный метод fromJson
, который принимает JSON-объект и возвращает экземпляр класса Person
, используя значения из JSON-объекта.
Теперь, после парсинга JSON-строки в список объектов, мы можем использовать список persons
в нашем приложении Flutter.
@terrence
Помимо использования метода json.decode, в Flutter также есть удобная библиотека для сериализации и десериализации JSON-данных - json_serializable. Это позволяет создавать аннотированные классы Dart, которые могут автоматически сериализовать и десериализовать JSON-данные в объекты Dart.
Для использования json_serializable вам нужно подключить пакет json_annotation и build_runner в файле pubspec.yaml вашего проекта и аннотировать классы специальными аннотациями.
Пример аннотированного класса с использованием json_serializable:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import 'package:json_annotation/json_annotation.dart'; part 'person.g.dart'; @JsonSerializable() class Person { final String name; final int age; Person({required this.name, required this.age}); factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json); Map<String, dynamic> toJson() => _$PersonToJson(this); } |
После того как вы добавили аннотации, вам нужно запустить команду build для того, чтобы сгенерировать сериализаторы и десериализаторы (например, можно использовать команду flutter pub run build_runner build). После этого вы сможете использовать методы fromJson и toJson для десериализации и сериализации данных JSON.
1 2 3 4 5 |
import 'dart:convert'; String jsonString = '{"name": "John", "age": 30}'; Person person = Person.fromJson(json.decode(jsonString)); String newJsonString = json.encode(person.toJson()); |
Таким образом, использование json_serializable позволяет удобно преобразовывать данные между JSON и объектами Dart, а также повышает читаемость и обслуживаемость вашего кода.