Dart:
Travailler avec JSON

Comment faire :

Dart offre un support intégré pour JSON avec la bibliothèque dart:convert, rendant le codage et le décodage de JSON simple. Voici des exemples illustrant les opérations de base :

Parser une chaîne JSON en objet Dart :

import 'dart:convert';

void main() {
  // Chaîne JSON d'exemple
  String jsonString = '{"name": "John", "age": 30, "email": "[email protected]"}';
  
  // Décodage JSON en Map Dart
  Map<String, dynamic> user = jsonDecode(jsonString);
  
  print('Bonjour, ${user['name']}! Vous avez ${user['age']} ans.');
  // Sortie : Bonjour, John! Vous avez 30 ans.
}

Encoder un objet Dart en chaîne JSON :

import 'dart:convert';

void main() {
  // Objet Dart d'exemple
  Map<String, dynamic> user = {
    'name': 'Jane',
    'age': 25,
    'email': '[email protected]'
  };
  
  // Encodage d'une Map Dart en JSON
  String jsonString = jsonEncode(user);
  
  print(jsonString);
  // Sortie : {"name":"Jane","age":25,"email":"[email protected]"}
}

Utiliser json_serializable pour des modèles complexes : Pour des modèles de données complexes, la sérialisation manuelle peut être fastidieuse. Le paquet json_serializable automatise ce processus. Il nécessite une configuration supplémentaire, y compris l’ajout de dépendances à votre fichier pubspec.yaml et la création de fichiers de build. Après la configuration, vous pouvez l’utiliser comme suit :

  1. Définissez un modèle avec des annotations :
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. Générez le code de sérialisation : Utilisez la commande du build runner pour générer le fichier user.g.dart :
flutter pub run build_runner build
  1. Utilisez votre modèle :
void main() {
  // Parser JSON en User
  Map userMap = jsonDecode('{"name": "John", "age": 30, "email": "[email protected]"}');
  User user = User.fromJson(userMap);
  
  print('Utilisateur : ${user.name}, Âge : ${user.age}');
  // Sortie : Utilisateur : John, Âge : 30

  // Convertir User en JSON
  String jsonString = jsonEncode(user.toJson());
  print(jsonString);
  // Sortie : {"name":"John","age":30,"email":"[email protected]"}
}

Ces exemples illustrent les interactions de base et avancées avec JSON en Dart, permettant aux développeurs de gérer les tâches de sérialisation des données dans leurs applications de manière transparente.