JSON (Dokumentenart)

Diese Dokumentenart wird zusammen mit dem Eingangsagenten DataCockpit/Portal verwendet, kann aber auch eigenständig verwendet werden.

Einstellungen


(1) Eingangsformat prüfen: Wenn diese Checkbox gesetzt wird, dann werden die Quellstrukturfelder beim Parsen auf die dort hinterlegten Format-Vorlagen geprüft. Wenn ein Wert die Format-Vorlage des Feldes verletzt oder die Feldlänge überschreitet, wird ein Fehler erzeugt. Im Fehlerfall wird nicht sofort in Phase 2 abgebrochen, sondern erst am Ende von Phase 2 oder bei 50 Fehlern. Achtung: Die Verwendung der Formatprüfung belastet die Performance und sollte nur wenn unbedingt nötig verwendet werden.

(2) Min/Max Eingangs-Angaben prüfen: Gibt an, ob die Anzahl von Wiederholungen (von Feldern und Knoten) in der Quellstruktur überprüft werden soll.

(3) Semantische Prüfung ausführen: Eingehende Dateien können mit semantischen Regeln überprüft werden. Siehe Abschnitt Semantische Prüfung.

(4) Erzwinge ein einzelnes Datenblatt: Gibt an, ob die Daten in einem einzigen Datenblatt zusammengefasst werden sollen. Ist diese Checkbox gesetzt, dann wird unterbunden, dass der Parser mehrere Datenblätter erstellt.

(5) JSON Lines Format: Siehe Anschnitt unten.

(6) Dateien splitten: Siehe Anschnitt unten.

JSON Lines Format


Diese Option erlaubt das Einlesen von Dateien im JSON-Lines-Format.

Die Chunk-Größe entscheidet dabei, wie viele Zeilen jeweils in einem Datenblatt landen. Beim Wert 0 und 1 hat jedes Datenblatt eine Zeile. Bei Werten >1 so viele Zeilen wie die Chunk-Größe.

Eine passende Quellstruktur kann über die Option Struktur aus Datei-Analyse erzeugen im Quellstruktur-Menü erzeugt werden. Dabei ist wichtig zu beachten, dass hier die korrekte Chunk-Größe angegeben wird, da für eine Chunk-Größe >1 eine andere Struktur erzeugt wird und nur bei der passenden Struktur auch das Parsen klappt. Siehe hierzu Abschnitt Datei für Struktur analysieren.

Dateien splitten


Wenn Sie eine sehr große JSON-Datei erhalten, die z. B. eine sehr hohe Anzahl an Lieferungen enthält, haben Sie die Möglichkeit diese Datei in kleinere Stücke aufzuteilen. Wir gehen von folgender Datei aus.


{
"Envelope": {
"header": {
"senderId": "317"
},
"content": {
"shipments": [
{
"consignorRef": "D83444679",
"forwarderRef": "D83444679"
},
{
"consignorRef": "CCV231101734",
"forwarderRef": "CCV231101734"
},
{
"consignorRef": "TY281403",
"forwarderRef": "TY281403"
}
]
}
}
}


In der Praxis wird diese Datei natürlich sehr viel grösser und komplexer sein, aber zur Veranschaulichung gehen wir von dieser vereinfachten Form aus. Wir sehen, die Datei enthält 3 Lieferungen (in der Praxis dann eher 3000). Wir möchten die Datei nun in kleinere Dateien splitten, die maximal 2 Lieferungen enthalten. Dazu können wir die folgenden Einstellungen verwenden.

Einstellungen


images/download/attachments/131697798/2207-version-2-modificationdate-1742958071796-api-v2.png


(7) Splitting text: Siehe folgenden Text. Beispiel: {"consignorRef":

(8) Chunk size: Siehe folgenden Text. Beispiel: 2

(9) Remove last comma: Siehe folgenden Text. Beispiel: true

(10) Copy header to chunk: Siehe folgenden Text. Beispiel: true

(11) JSON-prefix to insert: Siehe folgenden Text.

(12) JSON-suffix to append: Siehe folgenden Text. Beispiel: ]}}}


Zuerst müssen wir in (7) angeben, wie eine Lieferung (also ein Chunk) identifiziert wird. Das ist in unserem Fall die Zeichenkette {"consignorRef":. Nun müssen wir in (8) angeben, wie viele Chunks (> 0) unsere Teil-Dateien haben. Wir möchten also Teil-Dateien mit maximal zwei Lieferung haben. Beachten Sie bitte, dass diese Teil-Dateien nur intern für den Parser erzeugt werden.

Mit (9) können Sie das Komma entfernen, das z. B. in der zu splittenden Datei zwischen der zweiten und dritten Lieferung steht. Würden Sie dieses Komma nicht entfernen, würde kein korrektes JSON in den Teil-Dateien erzeugt werden. Wichtiger Hinweis: Der JSON-Text wird normalisiert, d. h. es werden alle Leerzeichen und Zeilenumbrüche entfernt, worauf dann auch beim Splitting-Text (7) zu achten ist.

Wenn Sie in den Teil-Dateien den Header der ursprünglichen Datei übernehmen wollen, können Sie (10) auf true setzen. Der Header sind hier alle Zeichen bis zum Auftreten des ersten Chunks. Damit erreichen Sie, dass die erzeugten Teil-Dateien genau die selbe Struktur haben wie die ursprüngliche Datei, aber eben nur mit einer begrenzten Anzahl von Lieferungen in diesem Fall.

Mit (11) können Sie eine Zeichenfolge angeben, die vor die ausgeschnittenen Chunks gesetzt wird. Das kann notwendig sein, um ein korrektes JSON-Format zu produzieren. Mit (12) können Sie eine solche Zeichenfolge nach den ausgeschnittenen Chunks einfügen. Das ist in unserem Beispiel auch notwendig, weil dort erst der Header eingefügt wird und dann die einzelnen Chunks. Anschließend müssen wir aber alle Klammern schließen, die im Header geöffnet und nicht geschlossen wurden, in unserem Fall also ]}}}.

Als Ergebnis würden wir nun zwei interne Teil-Dateien erhalten (sind im Log zu sehen), die strukturell so aussehen, wie die ursprüngliche Datei. Sie müssen also die Quellstruktur in Phase 3 nicht verändern. Die erste Teil-Datei enthält aber nur zwei Lieferungen und die zweite Teil-Datei nur eine Lieferung. Der Parser erzeugt nun aus jeder Teil-Datei ein eigenes Datenblatt. Wichtiger Hinweis: Beachten Sie bitte, dass in unserem Beispiel der oberste Knoten (Envelope) in der Quellstruktur ein Objekt repräsentiert, deswegen wird pro Auftreten dieser Envelope-Datenstruktur ein Datenblatt erzeugt. Würde der oberste Knoten ein Array repräsentieren, dann würde das Splitting zwar auch erfolgreich sein, beim Parsen würde es jedoch wieder unwirksam gemacht werden, da für jedes Element innerhalb des Arrays ein Datenblatt erzeugt werden würde. Siehe Abschnitt Wann beginnt der Parser ein neues Datenblatt?

Beispiel:


{
"shipments":[
{
"consignorRef":"D83444679",
"forwarderRef":"D83444679"
},
{
"consignorRef":"CCV231101734",
"forwarderRef":"CCV231101734"
},
{
"consignorRef":"TY281403",
"forwarderRef":"TY281403"
}
]
}


Sie würden hier auch den Header kopieren, aber Sie müssten zusätzlich den Parameter JSON-prefix to insert mit dem Wert {"Envelope": verwenden, um ein Objekt um Ihren Split zu setzen. Im Parameter JSON-suffix to append würden Sie dann den Wert ]}} verwenden. Also ]} zum Schließen des Headers und } zum Schließen des eingefügten Präfixes. Zusätzlich muss dann natürlich die Quellstruktur manuell entsprechend angepasst werden (also ein Oberknoten Envelope mit entsprechender Satzarterkennung).

Beispiel-Profile:

Profile-JSON_split_array_in_object.pak

Profile-JSON_split_array.pak

Dateien zusammenführen


Dateien können nicht direkt zusammengeführt werden, aber im Zusatz-Modul Content Inspection. Siehe Abschnitt Merge JSON.

Struktur-Vorlagen


Siehe Abschnitt Vorlagen für Quell- und Zielstrukturen.