Zum Hauptinhalt springen

Daten auswählen mit JSONPath

SHIPM8-Vorlagen navigieren mit der Syntax von JSONPath Plus durch die Daten. Ausdrücke testen Sie auf jsonpath.com.

Eine Beispielstruktur

Die Beispiele auf dieser Seite nutzen dieses Hafenanlauf-JSON:

{
"Data": [
{
"Ct_portcallfile": {
"eta": "2025-07-22T00:00:00",
"port name": "Amsterdam",
"__AdditionalData": {
"ship": {
"name": "Ocean Star"
},
"customer": {
"name": "Blue Tide Shipping",
"member": true,
"company": ""
},
"cargoRegistration": [
{
"cargo": "Crude Oil",
"quantity": 52000,
"blNumber": "BL-2025-001"
}
]
}
}
}
]
}

Werte herausgreifen

Mit einem punktgetrennten Pfad in {{ }} erreichen Sie jedes Feld:

Was Sie holen wollenAusdruckErgebnis
ETA{{ Data.[0].Ct_portcallfile.eta }}2025-07-22T00:00:00
Hafenname{{ Data.[0].Ct_portcallfile.['port name'] }}Amsterdam
Schiffsname{{ Data.[0].Ct_portcallfile.__AdditionalData.ship.name }}Ocean Star
Kundenname{{ Data.[0].Ct_portcallfile.__AdditionalData.customer.name }}Blue Tide Shipping
Mitgliedskennzeichen{{ Data.[0].Ct_portcallfile.__AdditionalData.customer.member }}True
Firma (leer){{ Data.[0].Ct_portcallfile.__AdditionalData.customer.company }}(leer)
Ladungsart{{ Data.[0].Ct_portcallfile.__AdditionalData.cargoRegistration.[0].cargo }}Crude Oil
Lademenge{{ Data.[0].Ct_portcallfile.__AdditionalData.cargoRegistration.[0].quantity }}52000
BL-Nummer{{ Data.[0].Ct_portcallfile.__AdditionalData.cargoRegistration.[0].blNumber }}BL-2025-001

Datentypen

JSONPath erreicht jeden gängigen JSON-Datentyp. Zeigen Sie direkt auf ein Objekt oder ein Array, kommt ein internes Objekt zurück — gehen Sie also immer bis zu einem einzelnen Feld hinunter, damit die Ausgabe lesbar ist.

TypBeispielErgebnis
String{{ Data.[0].Ct_portcallfile.__AdditionalData.ship.name }}Ocean Star
Zahl{{ Data.[0].Ct_portcallfile.__AdditionalData.cargoRegistration.[0].quantity }}52000
Boolean{{ Data.[0].Ct_portcallfile.__AdditionalData.customer.member }}True oder False
Null / leer{{ Data.[0].Ct_portcallfile.__AdditionalData.customer.company }}(leer)
Objekt{{ Data.[0].Ct_portcallfile }}System.Dynamic.ExpandoObject — nehmen Sie stattdessen ein konkretes Feld
Array-Element (Objekt){{ Data.[0].Ct_portcallfile.__AdditionalData.cargoRegistration.[0] }}System.Dynamic.ExpandoObject — nehmen Sie .cargo, .quantity usw.

Arrays und Indizes

Array-Indizes stehen in eckigen Klammern mit einem Punkt davor: .[0], .[1] und so weiter.

✅ Richtig:

{{ Data.[0].Ct_portcallfile.__AdditionalData.cargoRegistration.[0].cargo }}

❌ Falsch:

{{ Data[0].Ct_portcallfile.__AdditionalData.cargoRegistration[0].cargo }}   ← funktioniert nicht

Über eine Liste laufen

Hält ein Feld mehrere Elemente (etwa mehrere Ladungsanmeldungen), laufen Sie mit {{#each}} darüber, statt einen Index fest einzutragen:

{{#each Data.[0].Ct_portcallfile.__AdditionalData.cargoRegistration}}
Cargo: {{ this.cargo }}, Quantity: {{ this.quantity }}, BL: {{ this.blNumber }}
{{/each}}

In der Schleife zeigt this auf das aktuelle Element. Verwenden Sie keinen Index .[0] innerhalb eines #each — die Schleife geht ohnehin jedes Element durch.


Feldnamen mit Leerzeichen oder Sonderzeichen

Enthält ein Feldname Leerzeichen, setzen Sie ihn in eckige Klammern mit einfachen Anführungszeichen:

✅ Richtig:

{{ Data.[0].Ct_portcallfile.['port name'] }}

❌ Falsch:

{{ Data.[0].Ct_portcallfile.port name }}   ← funktioniert nicht

Dieselbe Klammerschreibweise brauchen Feldnamen mit Bindestrichen, Punkten oder solche, die mit einer Ziffer beginnen:

✅ Richtig:

{{ Data.[0].Ct_portcallfile.['arrival-eta'] }}
{{ Data.[0].Ct_portcallfile.['123status'] }}

Einen booleschen Wert als Ja/Nein zeigen

Boolesche Werte erscheinen standardmäßig als True / False. Mit ifEquals zeigen Sie freundlicheren Text:

{{#ifEquals Data.[0].Ct_portcallfile.__AdditionalData.customer.member true}}
Yes
{{else}}
No
{{/ifEquals}}

Regeln zum Merken

RegelDetail
Array-IndexImmer .[0], nie [0]
Leerzeichen in FeldnamenKlammerschreibweise ['field name'] verwenden
Sonderzeichen / führende ZifferDieselbe Klammerschreibweise: ['arrival-eta'], ['123id']
Ein Ausdruck je {{ }}Zwei Pfade lassen sich nicht in einem Ausdruck kombinieren
Kein führendes $Der Wurzelkontext gilt implizit; $.Data.[0]... ist unnötig
Groß-/Kleinschreibung zählteta und ETA sind verschiedene Felder
Fehlende FelderLiefern einen leeren Wert — keinen Fehler