JSON: Estrai valore (JSONPath)

action_json_extract · action · Utility · Disponibile · v1.0.0

Descrizione

Estrazione query-style di valori da oggetti JSON usando JSONPath (Stefan Goessner spec, de-facto standard supportato anche da MongoDB/AWS Lambda/Kubernetes JSON tooling). Pesca campi nested, filtra array via predicate, dedupe wildcard match — tutto senza scrivere codice JavaScript dentro un nodo run-js sandbox. È il "SELECT WHERE" del JSON: un nodo dedicato che rimpiazza decine di righe di traversal manuale. Differenza con i sibling: action_json_extract = SELECT-style con JSONPath (string in → value/array out). Per trasformazioni semantiche complete (map/reduce/group/aggregate inline) usa logic_transform JSONata che è un DSL Turing-complete. Per costruire stringhe template da JSON usa action_text_template. Per filtrare array stream usa logic_loop + filter inline o action_distinct dedicato. Per parsing CSV → JSON pre-extract usa logic_convert. Sintassi JSONPath completa supportata: (a) **root + dot path** — `$.user.email`, `$.items[0].name` (index numerico), `$["chiavi-con-trattino"]` (bracket per key non-identifier); (b) **wildcard** — `$..price` (recursive descent: tutti i campi "price" a qualunque livello), `$.items[*].name` (tutti gli elementi); (c) **slice** — `$.items[0:3]` (primi 3), `$.items[-2:]` (ultimi 2), `$.items[::2]` (step 2 — pari indici); (d) **filter predicate** — `$.items[?(@.qty>0)]` (righe con quantità positiva), `$.items[?(@.price>100 && @.category=="premium")]` (AND boolean), `$.items[?(@.tags.includes("hot"))]` (method chain JS sintaxa); (e) **union** — `$.items[0,2,5]` (cherry-pick indici), `$..["name","title"]` (multipli field name); (f) **expression compute** — `$.items.length` (lunghezza array nativa). Output semantica: se la query matcha 0 risultati → output `null` (NON throw, downstream può branchare con logic_if su null check). Se matcha 1 → output del valore scalare/oggetto. Se matcha N → output array. Modalità configurabile "always-array" forza wrap in array anche per match singolo (utile a valle di logic_loop che pretende array). Performance: parser JSONPath compilato e cachato per (workflow_id, node_id) — run successivi 50µs. Su payload >10 MB il parser usa streaming JSON (Oboe-like) per evitare full parse in memoria — un sync ERP che ritorna 100k righe non OOM il container. Use case Cappella-Sistina-grade: (1) **estrazione dati API utente** dopo trigger webhook OAuth callback — query `$.data.user.email` su response provider per persistere in DB users, (2) **filtro righe import Excel** dopo action_xlsx_parse — query `$.rows[?(@.qty>0 && @.totale_eur<10000)]` per selezionare ordini validi prima di logic_loop downstream, (3) **estrazione prezzi nested** payload e-commerce vendor che restituisce JSON con varianti annidate per colore/taglia — query `$..varianti[*].price` per audit listino completo cross-categoria, (4) **pre-processing payload webhook Stripe** prima di logic_switch su event type — query `$.type` per chiavi top-level + `$.data.object.id` per business key, evita JSONata overkill per single-field pick. Safety budget (implementato e testato): il parsing del path usa regex FISSE (non backtracking) → nessun ReDoS. Recursive descent `$..` con guard anti-DoS: profondità ricorsione max 32 livelli (anti stack-overflow su JSON deep-nested), max 200.000 nodi visitati (anti-DoS CPU su oggetti enormi), max 100.000 risultati raccolti (anti-esplosione output su wildcard); oltre i limiti → troncato per sicurezza. Input JSON parse failure → trattato come stringa (no crash).

⚙️ Parametri di configurazione

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

CampoTipoRequiredDefaultDescrizione
sourceExpression
Sorgente JSON
expressionno
{{$node.api_response.json}}
Espressione che ritorna l'oggetto JSON sorgente. Se vuoto, usa l'input del nodo precedente.
path
Path JSONPath
expressionsi
$.orders[0].total
Espressione JSONPath standard. Esempi: • $.user.email — campo singolo • $.items[*].name — array di nomi • $..price — tutti i price ricorsivamente • $.items[?(@.qty>0)] — filter su attributo Niente segnaposti {{}} — qui passa SOLO il path.
mode
Modalità output
enum
firstallcount
nofirst"first" (default): primo match (utile per campi singoli, es. $.user.email). "all": array di TUTTI i match (utile per estrazioni multiple, es. $..title). "count": numero di match (utile per validazioni "esiste almeno N elementi").
defaultValue
Valore di fallback (opzionale)
expressionno
(vuoto)
Se la path non matcha nulla, ritorna questo valore. Senza fallback, il nodo ritorna null.

⬆️ Output del nodo

Campi disponibili nei nodi successivi via $node.<alias>.json.<field>:

  • value
  • matchCount

💡 Esempio configurazione

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

{
  "id": "node-action_json_extract-1",
  "defId": "action_json_extract",
  "label": "JSON: Estrai valore (JSONPath)",
  "config": {
    "path": "$.orders[0].total",
    "mode": "first"
  }
}

🔗 Nodi correlati nella stessa categoria

Pronto a usare JSON: Estrai valore (JSONPath)?

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

Inizia gratisSfoglia tutti i nodi