Gegevens selecteren met JSONPath
SHIPM8-sjablonen gebruiken de JSONPath Plus-syntaxis om door gegevens te navigeren. Je kunt expressies testen op jsonpath.com.
Een voorbeeldgegevensstructuur
De voorbeelden op deze pagina maken gebruik van de volgende havenbezoek-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"
}
]
}
}
}
]
}
Waarden ophalen
Gebruik een punt-gescheiden pad binnen {{ }} om een veld te bereiken:
| Wat ophalen | Expressie | Resultaat |
|---|---|---|
| ETA | {{ Data.[0].Ct_portcallfile.eta }} | 2025-07-22T00:00:00 |
| Havennaam | {{ Data.[0].Ct_portcallfile.['port name'] }} | Amsterdam |
| Scheepsnaam | {{ Data.[0].Ct_portcallfile.__AdditionalData.ship.name }} | Ocean Star |
| Klantnaam | {{ Data.[0].Ct_portcallfile.__AdditionalData.customer.name }} | Blue Tide Shipping |
| Lidvlag | {{ Data.[0].Ct_portcallfile.__AdditionalData.customer.member }} | True |
| Bedrijf (leeg) | {{ Data.[0].Ct_portcallfile.__AdditionalData.customer.company }} | (leeg) |
| Ladingtype | {{ Data.[0].Ct_portcallfile.__AdditionalData.cargoRegistration.[0].cargo }} | Crude Oil |
| Ladingshoeveelheid | {{ Data.[0].Ct_portcallfile.__AdditionalData.cargoRegistration.[0].quantity }} | 52000 |
| BL-nummer | {{ Data.[0].Ct_portcallfile.__AdditionalData.cargoRegistration.[0].blNumber }} | BL-2025-001 |
Gegevenstypen
JSONPath kan elk standaard JSON-gegevenstype bereiken. Als je rechtstreeks een object of lijst aanwijst, wordt een intern object teruggegeven — zoom altijd in op een scalair veld voor leesbare uitvoer.
| Type | Voorbeeld | Resultaat |
|---|---|---|
| String | {{ Data.[0].Ct_portcallfile.__AdditionalData.ship.name }} | Ocean Star |
| Getal | {{ Data.[0].Ct_portcallfile.__AdditionalData.cargoRegistration.[0].quantity }} | 52000 |
| Boolean | {{ Data.[0].Ct_portcallfile.__AdditionalData.customer.member }} | True of False |
| Null / leeg | {{ Data.[0].Ct_portcallfile.__AdditionalData.customer.company }} | (leeg) |
| Object | {{ Data.[0].Ct_portcallfile }} | System.Dynamic.ExpandoObject — gebruik een specifiek veld |
| Lijstitem (object) | {{ Data.[0].Ct_portcallfile.__AdditionalData.cargoRegistration.[0] }} | System.Dynamic.ExpandoObject — gebruik .cargo, .quantity, etc. |
Lijsten en indexen
Lijstindexen staan tussen vierkante haakjes met een voorafgaande punt: .[0], .[1], etc.
✅ Correct:
{{ Data.[0].Ct_portcallfile.__AdditionalData.cargoRegistration.[0].cargo }}
❌ Onjuist:
{{ Data[0].Ct_portcallfile.__AdditionalData.cargoRegistration[0].cargo }} ← werkt niet
Itereren over een lijst
Wanneer een veld meerdere items bevat (bijv. meerdere ladingregistraties), gebruik je {{#each}} in plaats van een vaste index:
{{#each Data.[0].Ct_portcallfile.__AdditionalData.cargoRegistration}}
Cargo: {{ this.cargo }}, Quantity: {{ this.quantity }}, BL: {{ this.blNumber }}
{{/each}}
Binnen de lus verwijst this naar het huidige item. Gebruik geen .[0]-index binnen een #each — de lus itereert elk item automatisch.
Veldnamen met spaties of speciale tekens
Als een veldnaam spaties bevat, omsluit je deze met vierkante haakjes en enkele aanhalingstekens:
✅ Correct:
{{ Data.[0].Ct_portcallfile.['port name'] }}
❌ Onjuist:
{{ Data.[0].Ct_portcallfile.port name }} ← werkt niet
Dezelfde haakjesnotatie is vereist voor veldnamen met koppeltekens, punten, of die beginnen met een cijfer:
✅ Correct:
{{ Data.[0].Ct_portcallfile.['arrival-eta'] }}
{{ Data.[0].Ct_portcallfile.['123status'] }}
Een boolean weergeven als Ja / Nee
Booleans worden standaard weergegeven als True / False. Gebruik ifEquals om vriendelijkere tekst te tonen:
{{#ifEquals Data.[0].Ct_portcallfile.__AdditionalData.customer.member true}}
Yes
{{else}}
No
{{/ifEquals}}
Regels om te onthouden
| Regel | Detail |
|---|---|
| Lijstindexsyntaxis | Altijd .[0], nooit [0] |
| Spaties in veldnamen | Gebruik ['field name'] haakjesnotatie |
| Speciale tekens / begincijfer | Zelfde haakjesnotatie: ['arrival-eta'], ['123id'] |
Één expressie per {{ }} | Je kunt geen twee paden combineren in één expressie |
Geen voorloopende $ | De rootcontext wordt impliciet aangenomen; $.Data.[0]... is niet nodig |
| Hoofdlettergevoelig | eta en ETA zijn verschillende velden |
| Ontbrekende velden | Geven een lege waarde terug — geen foutmelding |