Transform (JSONata)

logic_transform · logic · Logica & Flow · Disponibile · v1.1.0

Descrizione

Operatore enterprise di trasformazione JSON dichiarativo basato su JSONata — il Domain-Specific Language standard IETF 2015 specializzato in trasformazione di documenti JSON arbitrari, alternativa più potente e leggibile a JSON Path/JMESPath/jq adottata da molte enterprise (IBM API Connect, Camel Quarkus, Logic App di Azure usano JSONata o varianti) per le sue capability di functional composable transformation in singolo espressione one-liner che equivarrebbero a 30+ righe di JavaScript imperativo. JSONata combina selectors XPath-like ($.users[role=admin].email), funzioni higher-order built-in (map, filter, reduce, sort, groupBy, distinct, sum, count, count, avg), template literal con string interpolation (\'Hello \\(name)\'), date arithmetic ($millis() - $toMillis(created_at)), conditional ternario potente (price > 100 ? "expensive" : "cheap"), object construction con projection ({"name": full_name, "totalSpent": $sum(orders.total)}), nested traversal con preservation di context (parent.{child.{name, count(child.items)}}). Pattern d'uso enterprise tipico: ristrutturare il JSON di response di un'API esterna nel formato atteso dal nodo downstream, evitando di scrivere logic_run_js custom che sarebbe più verbose + meno auditable. Sandboxed enterprise execution: l'engine JSONata è isolato via timeout di valutazione 5s (override env FLOWFORGE_JSONATA_TIMEOUT_MS) + cap di profondità 500 (timeboxing ufficiale JSONata via callback __evaluate_entry/exit → kill di ricorsioni/loop non-terminanti = anti-DoS sulla CPU del container), pure function semantics (no side effect: JSONata non ha accesso a fetch/fs/process), output sempre JSON-serializable. Documentazione e playground ufficiale completi a https://jsonata.org dove l'utente può sperimentare expression complesse con preview live prima di paste nel nodo FlowForge. Cheatsheet quick reference: $count(items) per conta, items[price>100].name per filter+select, $sum(orders.total) per aggregate sum, $reduce(nums, function($a,$b){$a+$b}) per custom reducer, $groupBy(orders, "customer_id") per gruppi, $sort(items, function($x,$y){$x.price < $y.price}) per ordering custom, items{$.category: $count($)} per object construction con dynamic keys. Use case: pulire payload di un webhook removendo campi inutili che inquinerebbero il context downstream (es. metadata, debug_info, internal_id); unificare formati eterogenei di provider diversi in una struttura comune (Stripe webhook + PayPal webhook + bonifico bancario → schema canonical { amount, currency, customer_email, payment_method, paid_at }); aggregare array con filter+map+reduce in singola expression chained vs N nodi logic_loop + logic_aggregate; rename di campi (snake_case da REST API legacy → camelCase per ingest in DB del cliente che usa camelCase convention).

⚙️ Parametri di configurazione

Campi mostrati nell’editor quando si configura il nodo. Generati direttamente dal NodeDefconfigFields.

CampoTipoRequiredDefaultDescrizione
expression
Espressione JSONata
codesi
{ "name": firstName & " " & lastName, "ageNext": age + 1, "topOrders": orders[total > 100].id }
Espressione JSONata applicata all'intero payload `input`. Le funzioni built-in più usate: `$count()`, `$sum()`, `$average()`, `$map()`, `$filter()`, `$reduce()`, `$keys()`, `$lookup()`, `$merge()`, `$string()`, `$number()`, `$boolean()`, `$now()`, `$millis()`, `$fromMillis()`. Per debug: usa il playground su jsonata.org incollando l'input reale di un run precedente.

💡 Esempio configurazione

Snippet JSON del nodo come compare nel workflow. I valori sono derivati daidefaultValue e dai parametri required.

{
  "id": "node-logic_transform-1",
  "defId": "logic_transform",
  "label": "Transform (JSONata)",
  "config": {
    "expression": "{\n  \"name\": firstName & \" \" & lastName,\n  \"ageNext\": age + 1,\n  \"topOrders\": orders[total > 100].id\n}"
  }
}

🔗 Nodi correlati nella stessa categoria

Pronto a usare Transform (JSONata)?

Disponibile da subito in tutti i piani FlowForge. Provalo gratis senza carta di credito.

Inizia gratisSfoglia tutti i nodi