codestory

Analysieren von Dart JSON mit dem Paket dart_json_mapper

View more Tutorials:

Folge uns auf unserer fanpage, um jedes Mal benachrichtigt zu werden, wenn es neue Artikel gibt. Facebook

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.

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/src/model_file1.dart
          - lib/src/model_file2.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 2 Dateien im Verzeichnis "lib/src". In diesem Verzeichnis abgelegte Dateien werden nur intern von Ihrem Projekt verwendet. Wenn Sie möchten, dass sie in anderen Projekten verwendet werden können, legen Sie sie in den Ordner "lib".

dart_json_mapper_tutorial (Your Project Name)
  - lib
      - src
           - model_file1.dart
           - model_file2.dart
model_file1.dart: Enthält die Klassen Contact und Employee mit Regeln für deren Konvertierung in JSON-Strukturen und umgekehrt.
lib/src/model_file1.dart

import 'package:dart_json_mapper/dart_json_mapper.dart'
    show JsonMapper, jsonSerializable, JsonProperty;

@jsonSerializable
class Contact {
  String address;
  String phone;
  Contact(this.address, this.phone); // Constructor
}
@jsonSerializable
class Employee {
  @JsonProperty(name: 'employeeName')
  String name;
  String email;
  Contact contact;
  Employee(this.name, this.email, this.contact); // Constructor
}
void main() {
  // Empty
}
model_file2.dart: Enthält die Company-Klasse mit Regeln für die Konvertierung in JSON-Strukturen und umgekehrt.
lib/src/model_file2.dart

import 'package:dart_json_mapper/dart_json_mapper.dart'
    show JsonMapper, jsonSerializable, JsonProperty;

import 'model_file1.dart';

@jsonSerializable
class Company {
  @JsonProperty(name: 'companyName')
  String name;
  Contact contact;
  Company(this.name, this.contact); // Constructor
}
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 einen der beiden folgenden Befehle aus (je nachdem, ob Ihr Projekt Dart oder Flutter ist):

dart pub run build_runner build --delete-conflicting-outputs

flutter pub run build_runner build --delete-conflicting-outputs
Als Ergebnis werden 2 Dateien erstellt. Führen Sie den obigen Befehl erneut aus, wenn Sie den Quellcode der Dateien model ändern.
Erstellen Sie ein Beispiel "bin/test_ex1.dart, das Ihnen zeigt, wie Sie ein Dart-Objekt in JSON-Text konvertieren
bin/test_ex1.dart

import 'package:dart_json_mapper/dart_json_mapper.dart'
    show JsonMapper, jsonSerializable, JsonProperty;

// 'dart_json_mapper_tutorial' : Your project name.
import 'package:dart_json_mapper_tutorial/src/model_file1.dart';
import 'package:dart_json_mapper_tutorial/src/model_file2.dart';

import 'package:dart_json_mapper_tutorial/src/model_file1.mapper.g.dart'
    as modelFile1;
import 'package:dart_json_mapper_tutorial/src/model_file2.mapper.g.dart'
    as modelFile2;

void main() {
  modelFile1.initializeJsonMapper();
  var contact = Contact('Address 1', '12345');
  var employee = Employee('John Smith', 'john@example.com', contact);

  var jsonString = JsonMapper.toJson(employee);
  print(jsonString);

  print(' --------------------------- ');

  modelFile2.initializeJsonMapper();
  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"
 }
}
Als nächstes folgt ein Beispiel, das einen JSON-Text in ein Dart-Objekt konvertiert:
bin/test_ex2.dart

import 'package:dart_json_mapper/dart_json_mapper.dart'
    show JsonMapper, jsonSerializable, JsonProperty;

// 'dart_json_mapper_tutorial' : Your project name.
import 'package:dart_json_mapper_tutorial/src/model_file1.dart';
import 'package:dart_json_mapper_tutorial/src/model_file2.dart';

import 'package:dart_json_mapper_tutorial/src/model_file1.mapper.g.dart'
    as modelFile1;
import 'package:dart_json_mapper_tutorial/src/model_file2.mapper.g.dart'
    as modelFile2;

void main() {
  var jsonString1 = '''{
      "employeeName": "John Smith",
      "email": "john@example.com",
      "contact": {
        "address": "Address 1",
        "phone": "12345"
        }
      }''';
  modelFile1.initializeJsonMapper();
  // May be null:
  var employee = JsonMapper.fromJson<Employee>(jsonString1);
  print('Employee Phone: ${employee!.contact.phone}');

  print(' --------------------------- ');

  modelFile2.initializeJsonMapper();
  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

View more Tutorials: