Analysieren von Dart JSON mit dem Paket dart_json_mapper
1. dart_json_mapper
dart_json_mapper ist eine Bibliothek, die eine bessere Lösung als dart:convert für die Arbeit mit JSON-Daten bietet. Es eignet sich für Anwendungen mit komplexen JSON-Modellen. Um es zu verwenden, sind jedoch einige Konfigurationsschritte erforderlich. Für kleine Anwendungen sollten Sie die dart:convert-Bibliothek verwenden - sie ist einfach und erfordert keine zusätzliche Konfiguration.
Die Bibliothek dart_json_mapper , inspiriert von json2typescript, serde, gson, Feature Parity mit Java Jackson, ist sehr beliebt und hat nur vier Annotation, an die man sich erinnern muss, um alle möglichen Anwendungsfälle abzudecken.
dart_json_mapper vs json_serializable
json_serializable ist eine bessere JSON-Handhabungsbibliothek als dart:convert. Es ist jedoch nur eine halbautomatische Bibliothek und nicht mit den Funktionen zu vergleichen, die dart_json_mapper bietet.
- Dart json serializable
2. Installieren Sie die Bibliothek
Um die Bibliothek dart_json_mapper zu verwenden, müssen Sie sie in der Datei pubspec.yaml deklarieren:
pubspec.yaml
dependencies:
dart_json_mapper:
dev_dependencies:
build_runner:
3. Zum Beispiel:
Fügen Sie zunächst die Datei build.yaml zu Ihrem Projekt hinzu. Dies ist die Konfigurationsdatei, die verwendet wird, um build_runner anzuweisen, neue Quellcodedateien aus den angegebenen Quellcodedateien zu generieren.
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
Erstellen Sie als Nächstes die Model-klassen:
dart_14139_dart_json_mapper (Your Project Name)
- lib
- model
- model.dart
- model_file1.dart
- model_file2.dart
@jsonSerializable | Diese Annotation wird für eine Klasse verwendet. Die Bibliothek dart_json_mapper generiert Code zum Konvertieren von Objekten dieser Klasse in JSON und umgekehrt. |
@JsonProperty | Diese Annotation ist eine Option, die für Klasseneigenschaften verwendet wird. Sie gibt den JSON-Eigenschaftsnamen an, der einem Klasseneigenschaftsnamen entspricht, wenn diese unterschiedlich sind.
Verwenden Sie @JsonProperty(ignore:true) für eine Eigenschaft, um sie zu ignorieren. |
model_file1.dart: Enthält die Klassen Contact und Employee mit Regeln für deren Konvertierung in JSON-Strukturen und umgekehrt.
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: Enthält die Company-Klasse mit Regeln für die Konvertierung in JSON-Strukturen und umgekehrt.
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
}
Öffnen Sie ein Fenster Terminal in der IDE:
- View > Terminal (Visual Studio Code)
- View > Tool Windows > Terminal (Android Studio)
Führen Sie den folgenden Befehl aus, damit dart_json_mapper Erweiterungscode für Model-klassen generiert.
dart run build_runner build --delete-conflicting-outputs
Wenn beim Versuch, diesen Befehl auszuführen, eine Fehlermeldung angezeigt wird, finden Sie weitere Informationen im Anhang am Ende des Artikels: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)
Das Tool generiert Ihnen eine Dart-Datei. Wenn es Änderungen an den Model-klassen gibt, führen Sie den obigen Befehl erneut aus.
- model.mapper.g.dart
Dart object ==> JSON:
Dieses Beispiel zeigt Ihnen, wie Sie ein Dart-Objekt in JSON-Text konvertieren:
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:
Als nächstes folgt ein Beispiel, das einen JSON-Text in ein Dart-Objekt konvertiert:
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. Appendix
dart run build_runner build --delete-conflicting-outputs
Wenn beim Ausführen des obigen Befehls eine Fehlermeldung angezeigt wird, versuchen Sie die folgende Lösung:
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
Anleitungen Dart
- Boolescher Datentyp in Dart
- Funktionen in Dart
- Die Anleitung zu Dart Closures
- Methoden in Dart
- Eigenschaften in Dart
- Punkt-Punkt-Operator in der Dart-Sprache
- Dart-Programmierung mit dem Online-Tool DartPad
- Installieren Sie das Dart SDK unter Windows
- Installieren Sie Visual Studio Code unter Windows
- Installieren Sie die Dart Code Extension für Visual Studio Code
- Installieren Sie das Dart Plugin für Android Studio
- Führen Sie Ihr erstes Dart-Beispiel in Visual Studio Code aus
- Führen Sie Ihr erstes Dart-Beispiel in Android Studio aus
- Analysieren von JSON mit dart:convert
- Die Anleitung zu Dart List
- Variablen in Dart
- Die Anleitung zu Dart Map
- Schleifen in Dart
- Analysieren von Dart JSON mit dem Paket dart_json_mapper
- Was ist Transpiler?
Show More