Skip to main content

JSON to Table

  • Task type: json-to-table

Il Task "JSON to Table" consente di importare i dati da un file JSON con struttura tabellare e inserirli in una tabella di un database. La sua funzione è duplice: si connette a un database per scrivere fisicamente i dati e, allo stesso tempo, espone i dati importati come un Dataset per l'utilizzo da parte di Task successivi nel Workflow (come un Iterator). Questo Task lavora su un JSON in ingresso fornito da un Task precedente (es. "Importa Testo").

1. Connessione database

In questa scheda si configurano tutti i parametri per stabilire la connessione al database di destinazione.

Tabella target

È possibile definire l’origine delle credenziali per la connessione:

  • Manuale: consente l’inserimento manuale di tutti i dati della connessione e della tabella nei campi sottostanti.
  • Environment: consente di utilizzare un ambiente di connessione preconfigurato. Selezionandone uno, i campi di autenticazione vengono compilati automaticamente.

Tipologia Database

Definisce il tipo di database (DBMS) a cui connettersi. Le opzioni supportate includono:

  • PostgreSQL
  • SQL Server
  • MySQL
  • Oracle DB: consente di specificare la connessione tramite SID o SERVICE.

Connessione SSL

Indica se la connessione al database deve avvenire tramite un canale sicuro.

Autenticazione

CampoDescrizione
HostIndirizzo del server del database (es. localhost, 192.168.1.100).
PortaPorta usata per la connessione (es. PostgreSQL: 5432, MySQL: 3306).
Nome DBNome del database a cui connettersi.
UserNome utente per accedere al database.
Imposta PasswordApre una finestra per inserire la password in modo sicuro.

Gestione tabella

Definisce come il task deve interagire con la tabella fisica nel database.

  1. Tabella target: determina l’azione da eseguire sulla tabella:
  • Crea tabella: crea sempre una nuova tabella. L’operazione fallisce se esiste già una tabella con lo stesso nome.
  • Crea tabella se non esiste: crea una nuova tabella solo se non esiste già una tabella con lo stesso nome.
  • Tabella esistente: inserisce i dati in una tabella già presente. Per impostazione predefinita, i nuovi dati vengono aggiunti a quelli già presenti (Append). Attivando la checkbox Truncate Insert, la tabella viene svuotata prima di inserire i nuovi dati.
  1. Nome tabella target: nome della tabella da creare o in cui scrivere i dati (es. utenti, prodotti, log_eventi).

2. Struttura Tabellare

La scheda Struttura tabellare permette di definire i campi (colonne) della tabella e mappare ciascuna colonna con gli elementi del file JSON di origine.

Campi disponibili

Ogni riga rappresenta una colonna della tabella. Per ciascun campo è possibile configurare:

CampoDescrizione
TipoTipo di dato del campo. Valori disponibili: NUMERICO, STRINGA, DATA, DATA E ORA
PrecisionePer NUMERICO: numero massimo di cifre; per STRINGA: lunghezza massima
AliasNome effettivo della colonna nella tabella del database. Sarà questo il nome visibile nel DB.
Espressione JSONPathEspressione JSONPath per estrarre il valore dal file JSON di origine (es. $.persona.info.name)

Gestione Table Structure

In basso a destra della Struttura tabellare sono presenti tre pulsanti:

PulsanteAzione
SalvaSalva la struttura definita
ImportaImporta una struttura esistente
EsportaEsporta la struttura definita

Questa funzionalità permette di salvare, esportare o riutilizzare le mappature, evitando la compilazione manuale dei campi e riducendo il rischio di errori.

Nota Tecnica

  • Visibilità: Le strutture salvate nel sistema sono visibili esclusivamente all'utente che le ha create.
  • Approfondimento: Per una descrizione dettagliata di tutte le opzioni e della logica di funzionamento, fare riferimento alla pagina Table Structure.

3. Esempio di configurazione

Per creare una tabella utenti con i seguenti campi:

TipoAliasEspressione JSONPath
STRINGAname$.user.info.name
STRINGAemail$.user.info.email
NUMERICOage$.user.info.age
STRINGAcity$.address.city
DATAregistration_date$.registration.date
DATA E ORAregistration_datetime$.registration.datetime

Il risultato di questa configurazione sarà la creazione di una tabella nel database con le colonne name, email, age, city, registration_date e registration_datetime (Alias) popolate con i valori estratti dal JSON (Espressione JSONPath).

Alias con caratteri speciali o maiuscole

Se si vogliono usare lettere maiuscole, caratteri speciali o spazi nei nomi delle colonne, è necessario racchiudere l'Alias tra doppi apici (es. "Nome Utente").

TipoAliasEspressione JSONPath
STRINGA“Name”$.name
STRINGA“Surname”$.surname

Risultato nel Database

4. Gestione di strutture JSON annidate

Il Task JSON to Table è in grado di gestire file JSON che contengono strutture annidate, come array o oggetti all’interno di altri oggetti. Tramite l’Espressione Path/Query, è possibile estrarre interi blocchi annidati o singoli valori, mappandoli su colonne della tabella. Il Task può serializzare un oggetto annidato in un’unica colonna di testo, preservando la struttura originale in formato JSON.

Esempio: Strutture complesse annidate

Il Task gestisce con la stessa facilità anche strutture molto più complesse. Consideriamo un JSON dove departments contiene un oggetto, che a sua volta contiene un array di altri oggetti.

[
{
"name": "Luca",
"surname": "Rossi",
"departments": {
"department": [
{ "details": { "name": "Marketing", "location": "Milan" } },
{ "details": { "name": "Sales", "location": "Rome" } }
]
}
},
{
"name": "Maria",
"surname": "Bianchi",
"departments": {
"department": [
{ "details": { "name": "HR", "location": "Florence" } }
]
}
}
]

Anche in questo caso, la configurazione nella "Struttura tabellare" rimane identica:

TipoPrecisioneAliasEspressione JSONPath
String1000name$.name
String1000surname$.surname
String4000departments$.departments

Il Task prenderà l’intero oggetto associato alla chiave departments e lo serializzerà in una singola stringa JSON.

Risultato nel Database:

namesurnamedepartments
LucaRossi{"department":[{"details":{"name":"Marketing","location":"Milan"}},{"details":{"name":"Sales","location":"Rome"}}]}
MariaBianchi{"department":[{"details":{"name":"HR","location":"Florence"}}]}

Estrazione di sotto-elementi con JSONPath

Se invece si volesse estrarre singoli elementi annidati, come ad esempio i nomi dei dipartimenti, è possibile utilizzare un’Espressione JSONPath specifica. Ad esempio:

TipoPrecisioneAliasEspressione JSONPath
String1000name$.name
String1000surname$.surname
String1000department_names$.departments.department[*].details.name

Con questa configurazione, il Task JSON to Table seleziona tutti i valori name presenti nell’array department e li inserisce nella colonna department_names del database, separandoli eventualmente con una virgola.

Risultato nel Database

namesurnamedepartment_names
LucaRossiMarketing, Sales
MariaBianchiHR

Questo approccio consente di estrarre solo i dati necessari, senza serializzare l’intero blocco JSON, rendendo la tabella più facilmente interrogabile e utilizzabile in altri Task o report.

5. Parametri di Output

Una volta che il Task "JSON to Table" ha completato l'elaborazione, espone un ricco set di parametri di output. Questi parametri non solo forniscono informazioni sull'esito dell'operazione, ma mettono anche a disposizione i dati elaborati in vari formati per i Task successivi.

  • result: Fornisce lo stato complessivo dell'esecuzione del Task (es. "Success" o un messaggio di errore).
  • resultJson: Rappresenta il risultato dell’esecuzione del task in formato JSON, includendo informazioni generali, configurazioni e dettagli sull’esecuzione.
  • targetTable: Restituisce il nome della tabella del database in cui i dati sono stati inseriti.
  • rowCount: Indica il numero totale di righe che sono state inserite nella tabella di destinazione.
  • DataExportCsv: Restituisce l'intero set di dati elaborato, formattato come testo in formato CSV (Comma-Separated Values).
  • DataExportJson: Restituisce l'intero set di dati elaborato, formattato come una stringa JSON.
  • Dataset: Questo parametro rappresenta il nome della colonna della tabella (Per es: name). È il parametro più importante per collegare questo Task ad un Iterator. Per accedere ai valori di una specifica colonna durante un'iterazione, si utilizza la sintassi Dataset.NomeColonna.
  • DataColumn: Questo parametro permette di accedere all'intero contenuto di una colonna come un'unica entità (ad esempio, un array o una lista).
  • DataColumn.NomeColonna: Restituisce tutti i valori della colonna “NomeColonna”. Per es: “Luca, Maria, Giovanni, Elena”

6. Esempio parametro resultJson

{
"id": 18676,
"name": "JSON to Table",
"description": "",
"type": "json-to-table",
"type_name": "JSON to Table",
"type_description": "Trasforma un json in tabella",
"config": {
"db_host": "example",
"db_name": "EXAMPLE;TrustServerCertificate=Yes",
"db_port": "1433",
"db_type": "sqlserver",
"db_user": "user_test",
"use_ssl": "Y",
"tab_name": "test_json",
"tab_target": "IF",
"db_password": "Q1sp7Lvv4jjvuZqoVhzCYL7YvaTzrJaF8h1VeuGKDUI=",
"output_links": [
{
"to": "[TASK 1401_18831_69]",
"from": "[TASK 1401_18676_26]",
"text": "Condizione 18",
"color": "green",
"points": [
-430.7143439873165,
-719.2420963708037,
-420.7143439873165,
-719.2420963708037,
-323.54756337750354,
-719.2420963708037,
-323.54756337750354,
-706.5559372725313,
-226.38078276769056,
-706.5559372725313,
-216.38078276769056,
-706.5559372725313
],
"toPort": "left4",
"fromPort": "port_1401_18676_1",
"isTraversed": true
}
],
"tab_truncate": false,
"tablestructure": [
{
"field_name": "task_name",
"field_type": "string",
"field_value": "$.task_name",
"field_format": "",
"field_nullable": "Y",
"field_precision": "1000"
},
{
"field_name": "generated_text",
"field_type": "string",
"field_value": "$.generated_text",
"field_format": "",
"field_nullable": "Y",
"field_precision": "1000"
}
],
"connection_mode": "env",
"env_connection_name": "SqlServer_SYBOT_TEST",
"oracle_db_name_type": "0"
},
"run_info": {
"run_id": 1457238,
"start_datetime": "2026-03-19 17:12:37",
"end_datetime": "2026-03-19 17:12:37",
"start_epoch": 1773940357.714373,
"end_epoch": 1773940357.955128,
"duration": 0,
"status": "Completed",
"cmd_text": "",
"run_result": "Success",
"result_text": "3 righe inserite nella tabella test_json",
"full_result_text": "3 righe inserite nella tabella test_json"
},
"output_parameters": {
"rowCount": "3",
"exitStatus": "0",
"targetTable": "test_json",
"DataExportCsv": "task_name;generated_text\n\"Generate Summary\";\n\"Translate Text\";\"[\"\"Testo tradotto di esempio...\"\",\"\"test\"\"]\"\n\"Check Grammar\";\"Correzioni suggerite...\"\n",
"DataExportJson": "[{\"task_name\":\"Generate Summary\",\"generated_text\":\"\"},{\"task_name\":\"Translate Text\",\"generated_text\":\"[\\\"Testo tradotto di esempio...\\\",\\\"test\\\"]\"},{\"task_name\":\"Check Grammar\",\"generated_text\":\"Correzioni suggerite...\"}]",
"Dataset.task_name": "task_name",
"DataColumn.task_name": "Generate Summary,Translate Text,Check Grammar",
"Dataset.generated_text": "generated_text",
"DataColumn.generated_text": ",[\"Testo tradotto di esempio...\",\"test\"],Correzioni suggerite..."
}
}