Analyser du JSON avec les objets dynamiques U2

Par Michael Byrne

3 min de lecture

UniVerse et UniData peuvent désormais gérer les formats JSON et XML sous forme d'objets, simplifiant ainsi leur création et leur utilisation. Depuis UniVerse 11.1 et UniData 7.3, les objets dynamiques U2 (UDO) facilitent la manipulation de ces formats.

Service météorologique

Pour illustrer notre propos, nous utiliserons un service météorologique en ligne gratuit qui nous fournira des données exploitables. Wunderground propose une API météo pour développeurs (disponible ici) . Vous y trouverez plus d'informations ; un compte gratuit et un code API vous permettront de tester le service.

 

Qu'est-ce que JSON ?

JSON signifie JavaScript Object Notation et est un format de données indépendant du langage, facilitant les échanges de données via HTTP et couramment utilisé par de nombreux langages de programmation. Si vous n'êtes pas familier avec JSON, nous vous recommandons de consulter Wikipédia pour une explication plus détaillée. Une fois votre clé API obtenue (voir ci-dessus), vous pouvez tester le service météorologique et observer les données renvoyées. Vous trouverez ci-dessous un bref extrait de code vous donnant un aperçu rapide de la structure. Il est important de la comprendre, car votre code devra savoir comment interpréter ces données.

{
"réponse": {
   "version":"0.1",
},
"prévision":{
"prévision simple":
"jour de prévision": [
           {"date":{
"époque":"1421287200",
"joli":"19h00 MST le 14 janvier 2015",
...suite...

Le code

Commençons par récupérer le JSON auprès du service météorologique:

** IMPORTANT ** Vous devrez obtenir votre propre clé API pour appeler le service
Clé API = "0123abcd01234abcd"
ville = "CO/Denver"
url = "http://api.wunderground.com/api/":apiKey:"/forecast/q/":city:".json"
méthode = "GET"
requête = ""

st = créerRequête(url, méthode, objRequest)
st = submitRequest(objRequest, 3600, "", headers, data, httpstatus)

À ce stade, si tout s'est bien passé, nous devrions avoir des données JSON dans le paramètre data .

SI UDORead(data, UDOFORMAT_JSON, RESTMSG) NE UDO_SUCCESS ALORS GOSUB ERR
SI UDOGetProperty(RESTMSG, "prévision", prévision, UDOTYPE) NE UDO_SUCCESS ALORS GOSUB ERR
SI UDOGetProperty(forecast, "simpleforecast", simple, UDOTYPE) NE UDO_SUCCESS ALORS GOSUB ERR
SI UDOGetProperty(simple, "forecastday", arrDays, UDOTYPE) NE UDO_SUCCESS ALORS GOSUB ERR

La fonction UDORead lit une chaîne JSON à partir du premier paramètre et renvoie un objet UDO valide dans le troisième paramètre. Notez les paramètres des trois appels suivants à UDOGetProperty: nous parcourons l’arborescence d’objets, de l’objet forecast à l’objet simpleforecast, puis au tableau forecastday. Une fois le tableau forecastday obtenu, il suffit de parcourir chaque élément et d’extraire les valeurs qui nous intéressent. N’oubliez pas de libérer la mémoire utilisée par l’UDO en appelant UDOFree() une fois l’opération terminée.

BOUCLE
   GETSTAT = UDOArrayGetNextItem(arrDays, W.UDO, W.TYPE)
TANT QUE GETSTAT = UDO_SUCCESS FAIRE
   i = i + 1
SI UDOGetProperty(W.UDO, "date", UDO.DATE, UDOTYPE) NE UDO_SUCCESS ALORS GOSUB ERR
SI UDOGetProperty(UDO.DATE, "monthname", F.MONTH, UDOTYPE) NE UDO_SUCCESS ALORS GOSUB ERR
SI UDOGetProperty(UDO.DATE, "day", F.DAY, UDOTYPE) NE UDO_SUCCESS ALORS GOSUB ERR
SI UDOGetProperty(UDO.DATE, "année", F.YEAR, UDOTYPE) NE UDO_SUCCESS ALORS GOSUB ERR
SI UDOGetProperty(W.UDO, "high", UDO.HIGH, UDOTYPE) NE UDO_SUCCESS ALORS GOSUB ERR
SI UDOGetProperty(UDO.HIGH, "fahrenheit", HF, UDOTYPE) NE UDO_SUCCESS ALORS GOSUB ERR
SI UDOGetProperty(W.UDO, "low", UDO.LOW, UDOTYPE) NE UDO_SUCCESS ALORS GOSUB ERR
SI UDOGetProperty(UDO.LOW, "fahrenheit", LF, UDOTYPE) NE UDO_SUCCESS ALORS GOSUB ERR
SI UDOGetProperty(W.UDO, "conditions", CONDITIONS, UDOTYPE) NE RÉPÈTE PAS UDO_SUCCESS ALORS GOSUB ERR
IMPRIMER F.MOIS:" ":F.JOUR:", ":F.ANNÉE
IMPRIMER " Haut: ":HF:" Bas: ":LF
IMPRIMER " Conditions: ":CONDITIONS
IMPRIMER
RÉPÉTER

SI UDOFree(RESTMSG) NE RESSORT UDO_SUCCESS ALORS GOSUB ERR

 

Le résultat

Prévisions météo pour Colorado/Denver

6 janvier 2015
Maximum: 55 Minimum: 15
Conditions météorologiques: partiellement nuageux

7 janvier 2015
Maximum: 34 Minimum: 27
Conditions météorologiques: partiellement nuageux

8 janvier 2015
Maximum: 46 Minimum: 17
Conditions météorologiques: partiellement nuageux

9 janvier 2015
Maximum: 32 Minimum: 18
Conditions: Claires

 

Obtenez le code

Si vous souhaitez tester ce code, vous pouvez le télécharger depuis GitHub.

Articles connexes

Security & Compliance

Prêt pour la facturation électronique: échéances, exigences et prochaines étapes pratiques

1 min de lecture
Prêt pour la facturation électronique: échéances, exigences et prochaines étapes pratiques
Intelligence artificielle (IA)

Présentation de Rocket EVA 2.0

6 minutes de lecture
Rocket EVA 2.0 introduit des agents d'IA gouvernés pour les opérations informatiques mainframe et hybrides, aidant les équipes à accélérer les investigations, à étendre leur expertise et à appliquer [...]
Modernisation des applications

Choisir la bonne voie pour la modernisation du code augmentée par l'IA

3 minutes de lecture
Rocket reconnu comme Challenger dans le Magic Quadrant™ de Gartner® pour les outils de modernisation du code augmentés par l'IA