Как правильно спарсить json во flutter?

Пользователь

от terrence , в категории: Другие , 2 года назад

Как правильно спарсить json во flutter?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от amaya_bahringer , 2 года назад

@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.

Пользователь

от sherwood_littel , 6 месяцев назад

@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, а также повышает читаемость и обслуживаемость вашего кода.