JSON-Pfade und Templates¶
Viele Teile der App lesen oder schreiben Daten über JSON-Pfade. Diese Seite fasst die Syntax und das Laufzeitverhalten zusammen.
JSON-Pfade¶
Die App nutzt eine einfache Pfadsprache ohne Wildcards.
Unterstützte Syntax¶
stateroom.temperaturerooms[0].nameavailable_scenes[2].label$für den gesamten Root-Wert
Nicht unterstützt¶
*- rekursive Suchen
- Filterausdrücke
- Array-Slices
Leseverhalten¶
Intern liest JsonPathResolver Werte so:
read(root, path)liefertJsonElement?readAsString(root, path)liefertString?stringify(element)wandelt Primitive und Objekte lesbar in Text um
Wenn ein Pfad nicht existiert:
- kommt
nullheraus TextSourceConfig.fallbackkann diesen Fall abfangen
Sonderfall Root-Wert:
- mit
$liest du den kompletten Root-Wert - das ist besonders praktisch für Endpoints, die nur einen primitiven Wert wie
on,42odertrueliefern
Template-Syntax¶
mode = "template" und mode = "table" nutzen beide dieselbe Platzhalter-Syntax mit doppelten geschweiften Klammern:
Jeder Platzhalter ist intern ein JSON-Pfad.
Beispiel für primitive Antworten:
Wenn ein Pfad nicht existiert:
- wird er durch einen leeren String ersetzt
Danach bereinigt die App überflüssige Leerzeichen vor Zeilenumbrüchen und trimmt den Gesamtausdruck.
Tabellen-Syntax für mode = "table"¶
Nach der Template-Auflösung interpretiert die App den fertigen Text bei mode = "table" als einfache Tabelle:
- Zeilenumbruch trennt Rows
|trennt Spalten- führende oder abschliessende
|sind optional - Markdown-Trennzeilen wie
|---|---|oder|:---|---:|werden ignoriert
Beispiel:
oder im Markdown-Stil:
| Quelle | Leistung |
|--------|----------|
| Netz | {{grid.draw_watts}} W |
| PV | {{pv.watts}} W |
Typische Einsatzorte für Pfade¶
title.valuebeimode = "path"value.valuebeimode = "path",mode = "template"odermode = "table"icon.namePathcolorRules[].when.pathslider.valuePathselect.valuePathselect.optionsPathselect.optionValuePathselect.optionLabelPathshutter.valuePathRequestActionValueBindingConfig.path
Pfade in Select-Optionen¶
Bei optionValuePath und optionLabelPath wird relativ zum jeweiligen Optionsobjekt gelesen.
Beispiel:
Dann funktionieren:
optionValuePath = "id"optionLabelPath = "label"
Bedingungen für Farbregeln¶
Beispiele:
Wahrheitswert prüfen¶
Numerischen Bereich prüfen¶
Regulärer Ausdruck¶
Schreiben in JSON über Pfade¶
JsonPathUpdater.upsert(...) wird für Action-Bindings und optimistische Updates verwendet.
Eigenschaften:
- legt fehlende Zwischenobjekte automatisch als leere JSON-Objekte an
- arbeitet nur mit Objektpfaden wie
room.level - Arrays werden beim Schreiben derzeit nicht erweitert
Beispiel:
Ausgangsbody:
Ergebnis nach Binding:
Typische Fehler¶
- falsche Schreibweise des Feldnamens
- Array-Index existiert nicht
keyundpathverwechselt, z. B. bei Header-Bindings- Erwartung, dass Templates fehlende Werte automatisch formatieren
Empfehlung¶
- flache und sprechende Felder bevorzugen
- bei Select-Optionen einheitliche Objektstruktur verwenden
- Templates nur für Anzeige, nicht für Logik verwenden
- bei Action-Bindings möglichst eindeutige JSON-Pfade nutzen