---
title: "Integrazione dei dati tramite servizi web"
date: "2020-05-11"
categories: 
  - "data-integration"
  - "json"
  - "tools"
tags: 
  - "data-integration"
  - "data-mapping"
  - "excel-data-mapping"
  - "json-mapping"
  - "mapforce"
  - "web-services"
description: Scoprite come integrare i dati delle previsioni meteorologiche provenienti da un servizio web in Excel, utilizzando MapForce, concentrandovi sulle tecniche di mappatura JSON e di conversione dei dati.
---
Status: #blog

Tags:  #data-integration #data-mapping #excel-data-mapping #json-mapping #mapforce #web-services

Categories: [data-integration](/blog/it/category/data-integration.md) | [json](/blog/it/category/json.md) | [tools](/blog/it/category/tools.md)
# Integrazione dei dati tramite servizi web

In un [post precedente](https://www.altova.com/blog/analyze-json-data-in-xmlspy-grid-view/), abbiamo scritto che ogni attività di integrazione dei dati e di creazione di report deve iniziare con una chiara comprensione dei dati di origine. Utilizzando la visualizzazione a griglia in XMLSpy, l'editor [di XML e JSON leader del settore](https://www.altova.com/it/xmlspy-xml-editor), abbiamo analizzato i dati JSON relativi alle previsioni meteorologiche per i prossimi 5 giorni, ottenuti da un servizio web.

Continuando con lo scenario che abbiamo presentato in precedenza, utilizzeremo MapForce, il software grafico pluripremiato [strumento di mappatura dei dati per la conversione e l'integrazione da qualsiasi formato a qualsiasi altro](https://www.altova.com/it/mapforce), trasformare le previsioni per una serie di importanti porti commerciali in documenti Excel ben formattati. Vogliamo evidenziare eventuali forti venti o piogge intense che potrebbero causare ritardi, interferendo con il carico e lo scarico dei container tramite le gru, oppure rallentando l'entrata e l'uscita delle navi dai porti.

![](/blog/images/containership.jpg)

<!--more-->

La richiesta REST per le previsioni meteorologiche accetta le coordinate di latitudine e longitudine per restituire una previsione di 5 giorni per qualsiasi località nel mondo. Una singola mappatura MapForce può gestire più input e output, quindi inizieremo il progetto di integrazione dei dati del servizio web creando un elenco di porti commerciali e delle loro coordinate.

È molto semplice creare l'elenco come un nuovo documento JSON nella visualizzazione a griglia di XMLSpy: basta inserire i dati senza preoccuparsi dei caratteri specifici della sintassi JSON. Nell'immagine sottostante, abbiamo cliccato sull'icona in alto a sinistra per visualizzare l'elenco in formato tabellare

[![Un elenco dei principali porti commerciali, visualizzato in formato griglia JSON, all'interno di XMLSpy](/blog/images/port-list-grid.png)](port-list-grid.png)

La visualizzazione a griglia rende molto più semplice esaminare e controllare il contenuto dei file, a differenza della visualizzazione testuale, che mostra tutti i caratteri di sintassi necessari in un file JSON valido.

[![Lo stesso file JSON visualizzato in modalità testo](/blog/images/port-list-text.png)](port-list-text.png)

### Panoramica sulla mappatura dei dati

Il progetto di integrazione dati del servizio web MapForce utilizzerà l'elenco delle porte come file di input, invierà una richiesta REST per ogni insieme di coordinate e trasformerà i dati JSON risultanti per ciascuna porta in un foglio di lavoro Excel.

MapForce utilizza file di schema JSON, conformi alle specifiche di [json-schema.org](http://json-schema.org), per modellare le strutture dati JSON utilizzate per la mappatura. MapForce può generare automaticamente uno schema JSON a partire da un'istanza JSON. Questo funzionerà correttamente per il singolo documento port-list.json.

Abbiamo anche bisogno di uno schema JSON per mappare i dati restituiti dal servizio web, il che è un po' più complesso. Non abbiamo un singolo file .json che contenga tutte le possibili varianti dei dati obbligatori e facoltativi nella risposta.

Fortunatamente, XMLSpy può generare uno schema JSON basato su diversi documenti di esempio raccolti all'interno di una cartella di progetto XMLSpy.

[![Generare uno schema JSON a partire da più file di esempio in formato XML in XMLSpy](/blog/images/xmlspy-schema-gen.png)](xmlspy-schema-gen.png)

Aprire lo schema risultante nella visualizzazione JSON Schema, si nota che l'oggetto "pioggia" è facoltativo. Questo perché almeno uno dei file di istanza delle previsioni non prevedeva pioggia nell'arco dei 5 giorni, pertanto nessun oggetto "pioggia" è stato incluso nella risposta.

[![Esaminare lo schema nella visualizzazione Schema di XMLSpy](/blog/images/schema-view.png)](schema-view.png)

Possiamo utilizzare questo schema per descrivere i dati della risposta REST nella mappatura.

Nell'immagine sottostante, abbiamo iniziato a definire la mappatura dei dati importando il file "post-list.json" e integrando un nuovo servizio web. Abbiamo aggiunto l'URL REST e abbiamo associato le coordinate di latitudine e longitudine come parametri di input per costruire la richiesta. Finora, il corpo della risposta non ha una struttura definita.

[![Aggiungere la risposta REST alla mappatura dell'integrazione dei dati del servizio web](/blog/images/port-mapping-1.png)](port-mapping-1.png)

Possiamo cliccare sul corpo del documento per aprire la finestra di dialogo "Struttura della risposta" e assegnare lo schema che abbiamo creato in XMLSpy

[![Aggiungere lo schema JSON per mappare la struttura dei dati della risposta REST](/blog/images/response-structure-dialog.png)](response-structure-dialog.png)

Una volta definito lo schema, tutti gli elementi contenuti nel corpo del documento diventano disponibili per la mappatura

[![Visualizzazione di ogni elemento della risposta REST nella mappatura dell'integrazione dei dati del servizio web](/blog/images/port-mapping-2.png)](port-mapping-2.png)

Ora possiamo aggiungere il file Excel di destinazione. Ci è stato fornito un foglio di calcolo di esempio da utilizzare come modello, che include alcuni stili di cella, grafici e dati fittizi:

[![Un modello di foglio di calcolo per il risultato finale](/blog/images/sheet-1.png)](sheet-1.png)

Possiamo aggiungere questo foglio di calcolo alla mappatura dell'integrazione dei dati del servizio web come destinazione, ma dobbiamo ancora identificare le celle che riceveranno i dati

[![Aggiungere il foglio di calcolo alla mappatura dei dati](/blog/images/port-mapping-3.png)](port-mapping-3.png)

Cliccando sul pulsante a destra della voce "Righe 1, n=dinamico", si apre la finestra di dialogo "Seleziona intervallo". La riga 10 contiene le intestazioni delle colonne per i dati, quindi vogliamo mappare la tabella principale a partire dalla riga 11 nelle colonne da A a K. Le colonne hanno tipi di dati diversi, che corrispondono principalmente a tipi di testo o numerici nella sorgente JSON e a formati specifici in Excel. La finestra di dialogo "Seleziona intervallo" ci permette di definire con precisione gli elementi di destinazione e i tipi di dati:

[![Selezionare l'intervallo di celle in cui inserire i dati](/blog/images/select-range-dialog.png)](select-range-dialog.png)

Identificare i nomi delle colonne nella finestra di dialogo "Seleziona intervallo" le aggiunge come etichette nella mappatura dell'output. Successivamente, possiamo definire la logica per associare ogni previsione a un file Excel separato, come mostrato di seguito:

[![Creare nomi di file univoci per ogni foglio di calcolo](/blog/images/port-mapping-4.png)](port-mapping-4.png)

Il nome del file, situato nella parte superiore del foglio Excel di destinazione, è impostato su <dynamic>, il che indica che la mappatura genererà nomi di file. Ogni nome di file effettivo viene creato da una funzione di concatenazione che include il nome della città proveniente dalla lista di origine, generando nomi come forecast-Seattle.xlsx, ecc.

Dobbiamo anche assicurarci che la tabella dati principale in ogni file ricominci a partire dalla riga 11. Per farlo, abbiamo collegato l'oggetto di livello superiore dell'array di liste all'elemento di destinazione alle righe 10, con n definito dinamicamente, e abbiamo utilizzato una funzione di numerazione automatica per resettare la riga di partenza ogni volta che il nome del file cambia.

Ogni oggetto di tipo "lista" nella risposta verrà associato a una nuova riga nel foglio di calcolo Excel. Ora possiamo collegare gli elementi individuali presenti nella risposta alle colonne della riga. Nell'immagine sottostante, abbiamo collegato tutti gli elementi che non richiedono ulteriori trasformazioni.

[![Collegare gli elementi ricevuti nella risposta REST alle celle del foglio di calcolo](/blog/images/port-mapping-5.png)](port-mapping-5.png)

Per gli elementi collegati direttamente, i tipi di dati nella risposta JSON corrispondono direttamente ai tipi che abbiamo specificato per le colonne nel foglio di calcolo. Ad esempio, il campo "Temp" nei dati JSON di origine è numerico, e la colonna E nella destinazione è anch'essa numerica. Il tipo di dato per la descrizione nei dati di origine è una stringa, e la colonna B nella destinazione è anch'essa una stringa, e così via.

Nello schema JSON della risposta, abbiamo visto che l'oggetto "rain" era facoltativo. Se non esiste, vogliamo sostituirlo con lo zero. Questo è facilmente realizzabile creando un'espressione che combina le funzioni "exists" e "if-else":

[![Inserire il valore zero nel caso in cui il dato sulle precipitazioni sia mancante.](/blog/images/port-mapping-6.png)](port-mapping-6.png)

Una limitazione del formato dati JSON è che include solo due tipi di dati: stringa e numerico. Tipi di dati come interi e data/ora, o formati speciali di Excel come percentuali e formati contabili, non sono definiti in JSON. MapForce include in modo pratico funzioni integrate per trasformare i dati di origine nei tipi di dati desiderati, all'interno della mappatura. In questo modo, possiamo creare il formato data/ora che vogliamo nella colonna A della tabella Excel.

L'elemento "main.dt_text" nei dati JSON rappresenta la data e l'ora sotto forma di stringa, ad esempio: 2020-05-09 06:00:00. MapForce dispone di una funzione "parse-dateTime" che accetta la stringa e un modello di formato come input e restituisce un risultato che rappresenta data e ora. Tuttavia, c'è un'ulteriore complicazione: la stringa "dt-txt" è espressa nel fuso orario GMT, e non nell'ora locale della città per cui viene effettuata la previsione. L'offset locale è fornito nell'elemento "city.timezone" come un valore in secondi, positivo o negativo.

Per mantenere la visualizzazione principale della mappatura il più semplice possibile, abbiamo creato una funzione utente chiamata "calc-local-time". Questa funzione riceve una stringa e un offset e calcola l'ora locale. La funzione utente viene mappata esattamente come una funzione integrata:

[![](/blog/images/port-mapping-7-2.png)](port-mapping-7-2.png)

L'ultima operazione da eseguire per completare la mappatura dell'integrazione dei dati del servizio web è combinare i nomi delle città e dei paesi e aggiungerli alla riga 1, colonna C

[![Aggiungere la città e il paese nella prima riga](/blog/images/port-mapping-8.png)](port-mapping-8.png)

Ecco una panoramica completa della mappatura finale:

[![Una panoramica completa della mappatura per l'integrazione dei dati dei servizi web](/blog/images/port-mapping-complete.png)](port-mapping-complete.png)

Per ottenere i documenti Excel formattati correttamente per ogni città, abbiamo bisogno di un file Excel già formattato che corrisponda a ogni nome di file di destinazione. Un file batch è un modo rapido per creare le versioni originali, copiando ripetutamente il file Excel di esempio, insieme ai suoi stili e formule.

### Risultati dell'integrazione dei dati tramite servizi web

Cliccando sul pulsante "Output" situato nell'angolo in basso a sinistra della finestra di mappatura, viene eseguita la mappatura e vengono generati i file di output. Se Excel è installato sul computer, l'anteprima del file Excel risultante viene visualizzata nella finestra "Output":

[![La finestra di anteprima mostra il primo file Excel generato](/blog/images/port-forecast-output-1.png)](port-forecast-output-1.png)

La data, l'ora e le condizioni meteorologiche attuali, che si trovano in alto, e i riassunti testuali accanto al grafico delle precipitazioni, sono generati da formule presenti nel foglio di calcolo Excel. Tutti e nove i file di output sono stati creati e possiamo selezionare e visualizzare qualsiasi file individualmente. Di seguito è riportata la lista a tendina per la selezione dei file e il settimo file, che contiene le previsioni del tempo per Seattle:

[![Un'opzione nel menu per visualizzare in anteprima un altro file di output](/blog/images/port-forecast-output-2.png)](port-forecast-output-2.png)

Le funzionalità di Excel sono disponibili nella finestra di anteprima. Ad esempio, questo foglio di calcolo utilizza la funzione di scorrimento a schermo diviso, con una visualizzazione fissa della sezione superiore. Possiamo scorrere fino alla parte inferiore della tabella principale dei dati per vedere esattamente quanta pioggia è prevista nell'ultima previsione. Notare i numeri di riga sul lato sinistro:

[![Scorrere i dati visualizzati nella finestra di anteprima](/blog/images/port-forecast-output-3.png)](port-forecast-output-3.png)

Se il risultato è soddisfacente, possiamo salvare uno o tutti i file generati:

[![Salvataggio dei file di output dell'integrazione dei dati del servizio web](/blog/images/port-forecast-output-4.png)](port-forecast-output-4.png)

### Dati intermedi

MapForce è progettato per massimizzare l'efficienza nella conversione dei dati. Non è mai stato necessario salvare, gestire o manipolare esplicitamente i dati JSON intermedi provenienti dalla risposta REST. L'esecuzione di questa mappatura per l'integrazione dei dati del servizio web non salva i dati intermedi.

Se desideriamo o abbiamo bisogno di salvare i dati della risposta JSON insieme ai fogli di calcolo Excel finali, MapForce offre diverse opzioni. Una di queste è creare una mappatura a catena che salvi i dati della risposta come un file JSON intermedio, basato sullo stesso schema della risposta. Successivamente, potremmo mappare il file JSON per creare l'output Excel. Una mappatura a catena consente di visualizzare in anteprima e salvare sia i file intermedi che il risultato finale. Qui è mostrata la lista dei file di output generata da una mappatura a catena, con uno dei file JSON visualizzato in modalità testo in background:

[![Una soluzione alternativa per l'integrazione dei dati dei servizi web, che prevede l'utilizzo di dati intermedi](/blog/images/port-forecast-output-5.png)](port-forecast-output-5.png)

### Integrazione automatizzata dei dati provenienti da servizi web

Il nostro scenario di lavoro richiederebbe l'aggiornamento delle previsioni ogni giorno. Possiamo salvare la mappatura come file di esecuzione per MapForce Server, per [elaborazione automatizzata](https://www.altova.com/it/mapforce-server) tramite MapForce Server, oppure può essere implementato direttamente su FlowForce Server per generare nuove previsioni secondo un programma automatizzato. Un processo su FlowForce Server può combinare attività di integrazione dati con diverse azioni, tra cui azioni di sistema come lo spostamento di file o l'invio di email, oppure un processo su FlowForce Server può [eseguire flussi di lavoro complessi](https://www.altova.com/it/flowforceserver) che possono trasmettere risultati e parametri per attivare altri processi.

Guarda un breve [video dimostrativo](https://www.altova.com/it/mapforce/demos) di MapForce, oppure [scaricare una versione di prova gratuita](https://www.altova.com/it/mapforce/download) inclusi tutorial, guide e numerosi esempi per iniziare il vostro progetto di integrazione di dati JSON e di servizi web, oppure per altre esigenze di mappatura, conversione e trasformazione dei dati!
