Analyser Dart JSON avec le package dart_json_mapper
1. dart_json_mapper
dart_json_mapper est une bibliothèque qui fournit une meilleure solution que dart:convert pour travailler avec des données JSON. Il convient aux applications avec des modèles JSON complexes. Cependant, pour l'utiliser, il est nécessaire d'effectuer quelques étapes de configuration. Pour les petites applications, vous devez utiliser la bibliothèque dart:convert - c'est simple et n'exige d'aucune configuration supplémentaire.
La bibliothèque dart_json_mapper inspirée de json2typescript, serde, gson, qui dispose de mêmes fonctionnalités comparables à Java Jackson, est très populaire et n'a que quatre annotations à retenir pour couvrir tous les cas d'utilisation possibles.
dart_json_mapper vs json_serializable
json_serializable est une meilleure bibliothèque de gestion JSON que dart:convert. Cependant, il ne s'agit que d'une bibliothèque semi-automatique et ne peut être comparée aux fonctionnalités offertes par dart_json_mapper.
- Dart json serializable
2. L'installation de la bibliothèque
Pour utiliser la bibliothèque dart_json_mapper, il est impératif de la déclarer dans le fichier pubspec.yaml :
pubspec.yaml
dependencies:
dart_json_mapper:
dev_dependencies:
build_runner:
3. Par exemple
Tout d'abord, ajouter le fichier build.yaml à votre projet. Il s'agit du fichier de configuration, utilisé pour demander à build_runner de générer de nouveaux fichiers de code source à partir des fichiers de code source spécifiés.
build.yaml
targets:
$default:
builders:
dart_json_mapper:
generate_for:
# here should be listed entry point files having 'void main()' function
- lib/model/model.dart
# This part is needed to tell original reflectable builder to stay away
# it overrides default options for reflectable builder to an **empty** set of files
reflectable:
generate_for:
- no/files
Ensuite, créez les classes Model:
dart_14139_dart_json_mapper (Your Project Name)
- lib
- model
- model.dart
- model_file1.dart
- model_file2.dart
@jsonSerializable | Cette annotation est utilisée pour une classe. La bibliothèque dart_json_mapper générera du code pour convertir les objets de cette classe en JSON et vice versa. |
@JsonProperty | Cette annotation est une option utilisée pour les propriétés de classe. Il spécifie le nom de propriété JSON qui correspond à un nom de propriété de classe s'ils sont différents.
Utilisez @JsonProperty(ignore:true) pour qu'une propriété l'ignore. |
model_file1.dart : Contenir les classes Contact et Employee, avec des règles pour les convertir en structures JSON et vice versa.
model_file1.dart
part of 'model.dart';
@jsonSerializable
class Contact {
String address;
String phone;
Contact(this.address, this.phone); // Constructor
}
@jsonSerializable
class Employee {
@JsonProperty(name: 'employeeName') // JSON Property Name!!
String name; // Dart Property Name
String email;
Contact contact;
@JsonProperty(ignore: true)
String? privateEmail; // This property will be Ignored.
Employee(this.name, this.email, this.contact); // Constructor
}
model_file2.dart : Contenir la classe Company, avec des règles pour la convertir en structures JSON et vice versa.
model_file2.dart
part of 'model.dart';
@jsonSerializable
class Company {
@JsonProperty(name: 'companyName') // JSON Property Name
String name; // Dart Property Name
Contact contact;
Company(this.name, this.contact); // Constructor
}
- The part and part of keywords in Dart
model.dart
import 'package:dart_json_mapper/dart_json_mapper.dart';
part 'model_file1.dart';
part 'model_file2.dart';
// This main() function is required!
void main() {
// Empty
}
Ouvrir une fenêtre Terminal sur l'IDE :
- View > Terminal (Visual Studio Code)
- View > Tool Windows > Terminal (Android Studio)
Exécutez la commande ci-dessous pour que dart_json_mapper génère du code d'extension pour les classes Model.
dart run build_runner build --delete-conflicting-outputs
Consultez l'annexe à la fin de l'article si vous recevez une erreur lorsque vous essayez d'exécuter cette commande:dart run build_runner build --delete-conflicting-outputs
dart run build_runner build --delete-conflicting-outputs
[INFO] Generating build script completed, took 415ms
[INFO] Reading cached asset graph completed, took 144ms
[INFO] Checking for updates since last build completed, took 768ms
[INFO] Running build completed, took 3.7s
[INFO] Caching finalized dependency graph completed, took 83ms
[INFO] Succeeded after 3.8s with 31 outputs (61 actions)
L'outil vous génère un fichier Dart. S'il y a des modifications dans les classes Model, exécutez à nouveau la commande ci-dessus.
- model.mapper.g.dart
Dart object ==> JSON:
Cet exemple vous montre comment convertir un objet Dart en texte JSON:
test_dart_to_json_ex1.dart
import 'package:dart_json_mapper/dart_json_mapper.dart';
import 'model/model.dart';
import 'model/model.mapper.g.dart';
void main() {
initializeJsonMapper(); // <-----------------------
var contact = Contact('Address 1', '12345');
var employee = Employee('John Smith', 'john@example.com', contact);
var jsonString = JsonMapper.toJson(employee);
print(jsonString);
print(' --------------------------- ');
contact = Contact('Address 1', '99999');
var company = Company('Google', contact);
jsonString = JsonMapper.toJson(company);
print(jsonString);
}
Output:
{
"employeeName": "John Smith",
"email": "john@example.com",
"contact": {
"address": "Address 1",
"phone": "12345"
}
}
---------------------------
{
"companyName": "Google",
"contact": {
"address": "Address 1",
"phone": "99999"
}
}
JSON ==> Dart object:
Ci-dessous un exemple qui convertit un texte JSON en objet Dart :
test_json_to_dart_ex1.dart
import 'package:dart_json_mapper/dart_json_mapper.dart';
import 'model/model.dart';
import 'model/model.mapper.g.dart';
void main() {
initializeJsonMapper(); // <-----------------------
var jsonString1 = '''{
"employeeName": "John Smith",
"email": "john@example.com",
"contact": {
"address": "Address 1",
"phone": "12345"
}
}''';
// May be null:
var employee = JsonMapper.fromJson<Employee>(jsonString1);
print('Employee Phone: ${employee!.contact.phone}');
print(' --------------------------- ');
var jsonString2 = '''{
"companyName": "Google",
"contact": {
"address": "Address 1",
"phone": "99999"
}
}''';
// May be null:
var company = JsonMapper.fromJson<Company>(jsonString2);
print('Company Phone: ${company!.contact.phone}');
}
Output:
Employee Phone: 12345
---------------------------
Company Phone: 99999
Map<String,dynamic> ==> Dart object:
test_map_to_dart_ex1.dart
import 'package:dart_json_mapper/dart_json_mapper.dart';
import 'model/model.dart';
import 'model/model.mapper.g.dart';
void main() {
initializeJsonMapper(); // <-----------------------
Map<String, dynamic> map1 = {
"employeeName": "John Smith",
"email": "john@example.com",
"contact": {"address": "Address 1", "phone": "12345"}
};
// May be null:
var employee = JsonMapper.fromMap<Employee>(map1);
print('Employee Phone: ${employee!.contact.phone}');
print(' --------------------------- ');
Map<String, dynamic> map2 = {
"companyName": "Google",
"contact": {"address": "Address 1", "phone": "99999"}
};
// May be null:
var company = JsonMapper.fromMap<Company>(map2);
print('Company Phone: ${company!.contact.phone}');
}
Output:
Employee Phone: 12345
---------------------------
Company Phone: 99999
4. Appendice
dart run build_runner build --delete-conflicting-outputs
Si vous recevez une erreur lorsque vous essayez d'exécuter la commande ci-dessus, essayez la solution ci-dessous:
If your project is DART:
- File > Settings > Languages & Frameworks > Dart > Dart SDK path (Windows/Linux)
- Android Studio > Settings > Languages & Frameworks > Dart > Dart SDK path (Mac)
Run:
/Volumes/Apps/Apps/dart-sdk/bin/dart run build_runner build --delete-conflicting-outputs
If your project is FLUTTER:
Run:
/Volumes/Apps/Apps/flutter/bin/dart run build_runner build --delete-conflicting-outputs
Tutoriels de programmation Dart
- Type de données Boolean dans Dart
- Fonctions dans Dart
- Fermetures dans Dart
- Méthodes dans Dart
- Propriétés en Dart
- Programmation Dart avec l'outil en ligne DartPad
- Installer Dart SDK sur Windows
- Installer Visual Studio Code sur Windows
- Installer Dart Code Extension pour Visual Studio Code
- Installer Dart Plugin pour Android Studio
- Exécutez votre premier exemple Dart en Visual Studio Code
- Exécutez votre premier exemple Dart en Android Studio
- Parsing JSON avec dart:convert
- Le Tutoriel de Dart List
- Variables dans Dart
- Le Tutoriel de Dart Map
- Les Boucles en Dart
- Analyser Dart JSON avec le package dart_json_mapper
- Qu'est-ce que Transpiler?
Show More