Beispiel: Konvertieren von JSON in CSV
In diesem Beispiel wird gezeigt, wie Sie in MapForce Daten aus einer JSON-Datei auslesen und in eine kommagetrennte Textdatei konvertieren. Außerdem erfahren Sie darin, wie Sie Daten aus zusätzlichen in der JSON-Instanzdatei eventuell vorhandenen Eigenschaften, wie der in diesem Beispiel gezeigten, mappen. Mit zusätzlichen Eigenschaften sind Daten gemeint, die in der JSON-Instanzdatei vorhanden sind, obwohl Sie nicht durch das Schema definiert sind. In der Regel sollten keine zusätzlichen Eigenschaften verwendet werden. Stattdessen sollten alle Eigenschaften in Ihrem JSON-Schema definiert werden. Falls die JSON-Instanzdatei jedoch zusätzliche Eigenschaften enthält, so gehen Sie vor, wie in diesem Beispiel beschrieben.
Die Demo-Mapping-Datei zu diesem Beispiel finden Sie unter dem folgenden Pfad: <Dokumente>\Altova\MapForce2024\MapForceExamples\ReadJSON.mfd. Wenn Sie vorgehen, wie unten beschrieben, lernen Sie, wie Sie eine solche Mapping-Datei von Grund auf neu erstellen.
Die JSON-Quelldatei enthält Personendatensätze, die in CSV konvertiert werden sollen. Beachten Sie den markierten Text: Die erste und zweite Person haben eine zusätzliche Eigenschaft, die im Schema nicht definiert ist, nämlich birthday.
[ { "name": "Alethia Alonso", "email": "altethia@example.com", "age": 35, "birthday": "4 July" }, { "name": "Klaus Mauer", "email": "klaus@example.com", "age": 57, "birthday": "31 August" }, { "name": "Natsuo Shinohara", "email": "natsuo@example.com", "age": 29 } ] |
People.json
Unten sehen Sie das im Beispiel verwendete JSON-Schema. Wie durch das Schlüsselwort \$schema angegeben, validiert das Schema JSON-Instanzen anhand des Draft 04 JSON Schemas. Das Schema enthält einen Array people. der aus mehreren person-Objekten besteht. Das people-Objekt muss mindestens ein person-Objekt enthalten, um gültig zu sein. Jedes person-Objekt hat die Eigenschaften name, age und email. Beachten Sie, dass name und email vom Typ string sind, während age vom Typ integer ist. Außerdem sind die Eigenschaften name und email obligatorisch, während age optional ist.
{ "\$schema": "http://json-schema.org/draft-04/schema#", "title": "people", "type": "array", "items": { "title": "person", "type": "object", "required": [ "name", "email" ], "properties": { "name": { "type": "string" }, "email": { "type": "string", "format": "email" }, "age": { "type": "integer" } } }, "minItems": 1 } |
People.schema.json
Beachten Sie, dass das obige JSON-Schema für das Objekt person keine Eigenschaft additionalProperties enthält. Wenn die Eigenschaft additionalProperties im JSON-Schema nicht vorhanden ist, hat sie den Standardwert true, d.h. das Objekt in der JSON-Instanzdatei kann beliebig viele zusätzliche Eigenschaften haben und ist dennoch gültig. Eine JSON-Instanzdatei wie People.json kann daher anhand dieses Schemas erfolgreich validiert werden.
Um das in diesem Beispiel gewünschte Mapping-Ergebnis zu erzielen, gehen Sie folgendermaßen vor:
Schritt 1: Hinzufügen der JSON-Quelldatei zum Mapping
1.Klicken Sie im Menü Einfügen auf JSON Schema/Datei und navigieren Sie im Ordner <Dokumente>\Altova\MapForce2024\MapForceExamples\ zur Datei <Dokumente>\Altova\MapForce2024\MapForceExamples\People.schema.json. Wenn Sie nach einer Instanz gefragt werden, wählen Sie die Datei People.json im selben Ordner aus. Die MapForce-Komponente sieht zu diesem Zeitpunkt folgendermaßen aus:
![mf_json_01](./images/mf_json_01.png)
Die Struktur der MapForce-Komponente ähnelt - mit Ausnahme des Node Eigenschaft (zusätzliche) - der JSON-Datei selbst. Dieser Node zeigt an, dass die Eigenschaft additionalProperties des Objekts person entweder fehlt oder im Schema auf true gesetzt ist. Dadurch kann das Schema zusätzliche benutzerdefinierte Eigenschaften enthalten, so dass der Node in MapForce angezeigt wird, falls Sie von einigen der zusätzlichen Eigenschaften des Objekts mappen möchten (eine Beschreibung dazu finden Sie im nächsten Schritt).
Sie können die JSON-Quelldatei oder die JSON-Schemadatei jederzeit ändern, indem Sie auf die Titelleiste der JSON-Komponente doppelklicken und die Einstellungen anpassen, siehe JSON-Komponenteneinstellungen.
Schritt 2. Hinzufügen der CSV-Zieldatei zum Mapping
1.Klicken Sie im Menü Einfügen auf Textdatei.
![mf_json_02](./images/mf_json_02.png)
2.Wählen Sie Einfache Verarbeitung für Standard-CSV ... verwenden und klicken Sie auf "Weiter".
![mf_json_03](./images/mf_json_03.png)
3.Klicken Sie mehrmals auf Feld anhängen, um vier CSV-Felder hinzuzufügen und klicken Sie anschließend auf OK.
Nähere Informationen zu Textkomponenten finden Sie unter CSV und Textdateien.
Schritt 3: Ziehen der Mapping-Verbindungen
4.Ziehen Sie im Mapping, wie unten gezeigt, die Verbindungen zwischen der JSON-Komponente und der CSV-Komponente.
![mf_json_04](./images/mf_json_04.png)
Nähere Informationen dazu finden Sie unter Arbeiten mit Verbindungen.
Schritt 4: Vorschau auf das Mapping
Bei Anzeige einer Vorschau auf die Transformationsausgabe im Fenster Ausgabe sehen Sie das folgende Ergebnis:
Alethia Alonso,altethia@example.com,35, Klaus Mauer,klaus@example.com,57, Natsuo Shinohara,natsuo@example.com,29, |
In der Ausgabe sehen Sie, dass für jedes person-Objekt in der JSON-Datei eine neue Zeile erstellt wird und dass die Objekteigenschaften, wie gewünscht, durch Kommas voneinander getrennt werden.
Wir haben das Feld birthday aus der JSON-Instanzdatei, das im Schema nicht vorhanden ist, allerdings noch nicht gemappt.
Schritt 5: Mappen zusätzlicher Eigenschaften
Erinnern Sie sich, dass das Feld birthday eine zusätzliche Eigenschaft ist, die nicht im Schema definiert ist. Um Daten aus solchen Feldern auslesen zu können, bietet MapForce in der JSON-Komponente zusätzliche Datenelemente.
Um in diesem Beispiel Daten aus dem Feld birthday auszulesen, fügen Sie folgende Datenelemente zum Mapping hinzu:
1.Eine Konstante mit dem Wert "birthday", siehe Hinzufügen einer Konstante zum Mapping.
2.eine "Filter: Nodes/Zeilen" Komponente, siehe Filter und Bedingungen.
3.die logische Funktion equal, siehe Hinzufügen einer Funktion zum Mapping.
Verbinden Sie die Komponenten als nächstes wie unten gezeigt. Wenn Sie die Komponenten auf diese Art verbinden, sucht MapForce nach einer zusätzlichen Eigenschaft mit dem Namen birthday und kopiert den String-Wert, falls einer gefunden wird, in das Feld Field4 der Textkomponente.
![mf_json_05](./images/mf_json_05.png)
Über das Datenelement name unter property (additional) haben Sie im Mapping oben anhand des Namens der zusätzlichen Eigenschaft Zugriff darauf. Die folgenden Datenelemente (string, number, boolean, usw.) entsprechen den JSON-Datentypen. Anhand dieser Datenelemente haben Sie Zugriff auf den tatsächlichen JSON-Wert dieses Typs. Der Name der zusätzlichen Eigenschaft in diesem Beispiel lautet "birthday" und der Typ ist "string". Daher wurden diese beiden Datenelemente mit dem Filter verbunden.
Wenn Sie zu diesem Zeitpunkt eine Vorschau auf die Transformation anzeigen, sehen Sie das folgende Ergebnis:
Alethia Alonso,altethia@example.com,35,4 July Klaus Mauer,klaus@example.com,57,31 August Natsuo Shinohara,natsuo@example.com,29, |
Wie Sie in der Ausgabe sehen, enthält das vierte CSV-Feld nun den Wert der einzigen zusätzlichen Eigenschaft vom Typ "string", in diesem Fall von birthday. Da die dritte Person keine solche Eigenschaft birthday hat, steht in der CSV-Komponente an der entsprechenden Position kein Wert zur Verfügung.