Analyser des données JSON simples avec Flutter

Parmi les choses basiques à savoir faire avec Flutter, c’est utiliser des données JSON. Ont dit quelles sont simples lorsque votre fichier JSON est une suite d’éléments insérés dans des accolades {} et séparé par une virgule. Par exemple, voici un fichier JSON typique et vous pouvez en trouver un générique ici qui est utilisé dans la plupart des tutoriels:

[
  {
    "year": 2012,
    "id": 1,
    "title": "Model S",
  },
  {
    "year": 2015,
    "id": 2,
    "title": "Model X",
  },
  {
    "year": 2017,
    "id": 3,
    "title": "Model 3",
  }]

Sérialisation et désérialisation #

Pour pouvoir utiliser ces données avec Flutter, on va étudier ce fichier JSON simple sous la forme d’un modèle. Faire un modèle, c’est schématiser la structure de notre fichier JSON simple pour accéder à ses éléments. On parle alors de sérialisation c’est à dire mettre des données sous a forme de série. En bref on part de données brutes “raw data” pour obtenir une série qui classe toutes nos données.

Pour la classer, on va créer une class et on va distinguer chacun des types d’éléments qui compose notre liste. On obtient un résultat similaire à ça:

class Car {
  final int year;
  final int id;
  final String title;
}

Mais cela n’est pas tout, nous devons initialiser nos données car nous obtenons une erreur si nous ne le faisons pas. Donc:

class Car {
  final int year;
  final int id;
  final String title;

  Car({this.year, this.id, this.title});
}

Ensuite nous allons utiliser le constructeur factory qui est un “pattern” c’est à dire, comme je le disais un patron qui ” définit la structure générale” de notre fichier JSON et qui nous retourne la valeur de notre objet. Ici, notre fichier n’est pas exactement une liste mais c’est une map c’est à dire une collection de clés ou de valeurs auxquelles sont associées d’autre valeurs.

Par exemple: ” id: 1″. Ici, nous avons associé id la clé ou (key) à l’integer 1.

Comme je vous l’expliquais, on va donc partir de données brutes donc on va utiliser la méthode fromJson qui analyse notre fichier JSON et donc on va énoncer la structure des données donc une map de strings dynamiques et on va demander à ce que l’on nous retourne chaque valeur selon leur forme. On obtient donc le code complet suivant:

class Car {
  final int year;
  final int id;
  final String title;

  Car({this.year, this.id, this.title});

factory Car.fromJson(Map<String, dynamic> json) {
    return Car(
      year: json['year'] as int,
      id: json['title'] as int,
      title: json['title'] as String,
    );
  }
}