Files
Workflow/tasks/json_transform.md

41 lines
2.0 KiB
Markdown

# `json_transform` — JSON-Werte umformen
**Zweck:** Zieht per Pfadausdruck Werte aus einer JSON-Variable (z. B. Webhook-Antwort, `*_json` aus Auswahl-Tasks) und legt sie als Kontextvariablen ab — statt langer `set_var`/`calc`-Ketten. Pro `<ziel>` entsteht eine Variable; mehrere Treffer lassen sich aggregieren.
**Parameter**
| Name | Pflicht? | Default | Beschreibung |
|---|---|---|---|
| `quelle` | **ja** | — | JSON-String (Platzhalter erlaubt); ein einzelner `{{var}}` wird roh übernommen |
| `ziel` (`name`) | **ja** | — | Zielvariable; wiederholbar |
| `ziel` (`pfad`) | **ja** | — | Pfadausdruck (siehe unten) |
| `ziel` (`aggregat`) | nein | `first` | `first`, `last`, `sum`, `count`, `min`, `max`, `join`, `all` |
| `ziel` (`join`) | nein | `,` | Trenner bei `aggregat="join"` |
| `ziel` (`default`) | nein | *(leer)* | Wert, wenn der Pfad nichts liefert |
Pfadsyntax: `feld.unterfeld` (Objektzugriff), `liste[0]` (Index), `liste[*]` (alle Elemente → Array), `liste[?key=wert]` bzw. `liste[?key!=wert]` (Filter über String-Vergleich).
**Eingangswerte:** Die JSON-Variable unter `<quelle>`; Platzhalter in `pfad`.
**Ausgangswerte:**
- je `<ziel>` eine Kontextvariable `<name>`
- bei Array-/Objekt-Ergebnis zusätzlich `<name>_json` (JSON-String); `<name>` enthält dann den Roh-Wert (für `loop_foreach` nutzbar)
**XML-Beispiel**
```xml
<task type="json_transform" id="antwort_zerlegen">
<config>
<quelle>{{webhook_antwort}}</quelle>
<ziel name="buchungsnr" pfad="ergebnis.nummer"/>
<ziel name="summe" pfad="posten[*].betrag" aggregat="sum"/>
<ziel name="erste_id" pfad="posten[0].id"/>
<ziel name="offene" pfad="posten[?status=offen].betrag" aggregat="join" join=", "/>
<ziel name="anzahl" pfad="posten[*]" aggregat="count"/>
<ziel name="fallback" pfad="gibts.nicht" default="-"/>
</config>
</task>
```
**Hinweis:** `<quelle>` muss gültiges JSON enthalten, sonst endet der Task mit Fehler. `aggregat` wirkt nur, wenn der Pfad mehrere Werte liefert.