Analizza JSON con oggetti dinamici U2

Di Michael Byrne

3 minuti di lettura

UniVerse e UniData ora possono lavorare con JSON o XML come oggetti, semplificando la creazione o l'utilizzo di questi formati. A partire da UniVerse 11.1 e UniData 7.3, gli U2 Dynamic Objects (UDO in breve) aiutano a lavorare facilmente con questi formati.

Servizio meteorologico

Per aiutarci a costruire il nostro esempio, utilizzeremo un servizio meteo online gratuito che ci fornisce alcuni dati che possiamo analizzare. Wunderground ha API meteo per sviluppatori qui, scopri i dettagli lì, puoi ottenere un account gratuito e il codice API che ti permette di testare il servizio.

 

Cos'è JSON?

JSON sta per JavaScript Object Notation ed è un modo indipendente dal linguaggio per esprimere i dati, facile da scambiare tramite HTTP e comunemente compreso da molti linguaggi di programmazione. Probabilmente è meglio lasciare che Wikipedia lo spieghi meglio se non lo si ha familiarità. Una volta ottenuta la chiave API, è possibile testare il servizio meteo e vedere esattamente cosa viene restituito. Di seguito è riportato un breve frammento per darvi una rapida occhiata a come apparirà. È importante conoscere la struttura, perché il codice dovrà sapere cosa cercare.

{
"risposta": {
"versione":"0.1",
},
"previsione":{
"previsione semplice":
"previsionegiorno": [
{"data":{
"epoca":"1421287200",
"pretty": ore 19:00 MST del 14 gennaio 2015,
....continua....

Il codice

Iniziamo ottenendo il JSON dal servizio meteo:

** IMPORTANTE ** Dovrai ottenere la tua chiave API per chiamare il servizio
apiKey = "0123abcd01234abcd"
città = "CO/Denver"
url = "http://api.wunderground.com/api/":apiKey:"/forecast/q/":city:".json"
metodo = "GET"
richiesta = ""

st = createRequest(url, metodo, objRequest)
st = submitRequest(objRequest, 3600, "", intestazioni, dati, httpstatus)

A questo punto, se tutto è andato per il verso giusto, dovremmo avere dati JSON nel parametro dati .

SE UDORead(dati, UDOFORMAT_JSON, RESTMSG) NE UDO_SUCCESS ALLORA GOSUB ERR
SE UDOGetProperty(RESTMSG, "previsione", previsione, UDOTYPE) NE UDO_SUCCESS ALLORA GOSUB ERR
SE UDOGetProperty(previsione, "simpleforecast", semplice, UDOTYPE) NE UDO_SUCCESS ALLORA GOSUB ERR
SE UDOGetProperty(semplice, "forecastday", arrDays, UDOTYPE) NE UDO_SUCCESS ALLORA GOSUB ERR

La funzione UDORead legge una stringa JSON dal primo parametro e restituisce un oggetto UDO nel terzo parametro, se valido. Notate i parametri nelle successive 3 chiamate a UDOGetProperty: stiamo attraversando l'albero degli oggetti, dall'oggetto forecast all'oggetto simpleforecast fino all'array forecastday . Una volta ottenuto l'array forecastday, possiamo semplicemente scorrere ogni elemento e recuperare i valori che ci interessano. Assicuratevi solo di liberare la memoria utilizzata dall'UDO chiamando UDOFree() al termine.

CICLO CONTINUO
   GETSTAT = UDOArrayGetNextItem(arrDays, W.UDO, W.TYPE)
MENTRE GETSTAT = UDO_SUCCESS DO
io = io + 1
SE UDOGetProperty(W.UDO, "data", UDO.DATE, UDOTYPE) NE UDO_SUCCESS ALLORA GOSUB ERR
SE UDOGetProperty(UDO.DATE, "monthname", F.MONTH, UDOTYPE) NE UDO_SUCCESS ALLORA GOSUB ERR
SE UDOGetProperty(UDO.DATE, "giorno", F.DAY, UDOTYPE) NE UDO_SUCCESS ALLORA GOSUB ERR
SE UDOGetProperty(UDO.DATE, "anno", F.YEAR, UDOTYPE) NE UDO_SUCCESS ALLORA GOSUB ERR
SE UDOGetProperty(W.UDO, "high", UDO.HIGH, UDOTYPE) NE UDO_SUCCESS ALLORA GOSUB ERR
SE UDOGetProperty(UDO.HIGH, "fahrenheit", HF, UDOTYPE) NE UDO_SUCCESS ALLORA GOSUB ERR
SE UDOGetProperty(W.UDO, "low", UDO.LOW, UDOTYPE) NE UDO_SUCCESS ALLORA GOSUB ERR
SE UDOGetProperty(UDO.LOW, "fahrenheit", LF, UDOTYPE) NE UDO_SUCCESS ALLORA GOSUB ERR
SE UDOGetProperty(W.UDO, "condizioni", CONDIZIONI, UDOTYPE) NE UDO_SUCCESS ALLORA GOSUB ERR
STAMPA F.MESE:" ":F.GIORNO:", ":F.ANNO
STAMPA " Alto: ":HF:" Basso: ":LF
STAMPA " Condizioni: ":CONDIZIONI
STAMPA
RIPETERE

SE UDOFree(RESTMSG) NE UDO_SUCCESS ALLORA GOSUB ERR

 

Il risultato

Previsioni del tempo per CO/Denver

6 gennaio 2015
Alto: 55 Basso: 15
Condizioni: Parzialmente nuvoloso

7 gennaio 2015
Alto: 34 Basso: 27
Condizioni: Parzialmente nuvoloso

8 gennaio 2015
Alto: 46 Basso: 17
Condizioni: Parzialmente nuvoloso

9 gennaio 2015
Alto: 32 Basso: 18
Condizioni: sereno

 

Ottieni il codice

Se vuoi provare questo codice, puoi scaricarlo da GitHub

Post correlati

Security & Compliance

Pronti per la fatturazione elettronica: scadenze, requisiti e prossimi passi pratici

1 minuto di lettura
Pronti per la fatturazione elettronica: scadenze, requisiti e prossimi passi pratici
Intelligenza artificiale (IA)

Vi presentiamo Rocket EVA 2.0

6 minuti di lettura
Rocket EVA 2.0 introduce agenti di intelligenza artificiale governati per operazioni IT mainframe e ibride, aiutando i team ad accelerare le indagini, estendere le competenze e applicare [...]
Application Modernization

Scegliere il percorso giusto per la modernizzazione del codice potenziata dall'intelligenza artificiale

3 minuti di lettura
Rocket riconosciuta come Challenger nel Magic Quadrant™ di Gartner® per gli strumenti di modernizzazione del codice potenziati dall'intelligenza artificiale.