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 wollen | Ausdruck | Ergebnis |
|---|---|---|
| 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.
| Typ | Beispiel | Ergebnis |
|---|---|---|
| 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
| Regel | Detail |
|---|---|
| Array-Index | Immer .[0], nie [0] |
| Leerzeichen in Feldnamen | Klammerschreibweise ['field name'] verwenden |
| Sonderzeichen / führende Ziffer | Dieselbe 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ählt | eta und ETA sind verschiedene Felder |
| Fehlende Felder | Liefern einen leeren Wert — keinen Fehler |