Modèle d'objet LIRE_JSON
A partir de la version 11.00.
Ce modèle permet d'interpréter une chaîne au format JSON. Ce format est une représentation de la structure et des données d'un objet Javascript en texte lisible. Il est très utilisé dans les services et API web pour transmettre des données, tout comme le format XML. Mais si son utilisation en Javascript est naturelle, ce n'est pas le cas dans les autres langages de programmation.
Un JSON commence généralement par un noeud de type 'objet' puis contient des noeuds enfants de type chaîne, booléen, numérique, tableau, null ou un autre objet de manière hiérarchique.
Contrairement au modèle XMLIMPORT, LIRE_JSON n'effectue pas un import direct dans une table de données. La structure des JSON est rarement en forme de grille parfaite. Il n'existe pas (encore ; en version 11.01) de modèle pour écrire du JSON.
Chargement du contenu JSON
Avant toute chose, déclarer la variable héritée Json qui recevra le JSON à analyser :
VARIABLES : Chaine Heritee Json
Pour charger le JSON, si vous possédez un fichier sur le disque, vous pouvez utiliser la méthode :
AppliquerMethodeComposant SYSASCII.LIRE_FICHIER (vCheminFichier, json)
Si vous devez lire le résultat depuis une API web, vous pouvez utiliser le composant Msxml2.XMLHTTP.3.0. Exemple :
CreerContexteComposantCom "Msxml2.XMLHTTP.3.0","XMLHTTP"
ConnecterComposantCom "XMLHTTP"
// Lancer une requête http vers une url :
AppliquerMethodeComposantCom "XMLHTTP"."open" ("GET", vURL, 0)
AppliquerMethodeComposantCom "XMLHTTP"."send"
// Pour attendre le résultat, qui peut prendre plusieurs secondes faire une boucle avec :
AppliquerMethodeComposantComGet "XMLHTTP"."readyState" (readyState)
// quand readyState a la valeur 4, c'est que le serveur a répondu.
// On peut vérifier le statut de la réponse http (200=OK, 500=erreur serveur etc) avec
AppliquerMethodeComposantComGet "XMLHTTP"."status" (status)
// Enfin, stocker le résultat dans la variable json :
AppliquerMethodeComposantComGet "XMLHTTP"."responseText" (Json)
Une fois la chaine json remplie correctement, appeler la méthode qui charge la structure en mémoire :
AppliquerMethode Charger
Deux modes de fonctionnement
- La méthode ENUMERER parcourt l'ensemble du JSON et déclenche un évènement pour chaque élément trouvé. C'est la méthode à privilégier si la structure est suceptible de changer et si on veut lire la totalité de l'objet.
- La lecture directe d'un élément, à répéter pour chaque élément voulu. Fonctionnement à privilégier si on ne souhaite lire que quelques valeurs et qu'on maîtrise la structure.
La méthode ENUMERER
Une fois la méthode Enumerer appelée, vous recevrez les évènements suivants selon le type de chaque noeud rencontré séquentiellement :
Methode JSON_NULL Parametres : Entier niveau; Chaine nom
Methode JSON_ERREUR Parametres : Entier niveau; Chaine nom
Methode JSON_CHAINE Parametres : Entier niveau; Chaine nom, val
Methode JSON_BOOLEEN Parametres : Entier niveau; Chaine nom ; Entier val
Methode JSON_NUMERIQUE Parametres : Entier niveau; Chaine nom ; Double val
Methode JSON_TABLEAU Parametres : Entier niveau; Chaine nom
Methode JSON_OBJET Parametres : Entier niveau; Chaine nom
Les méthodes de lecture directe
Appeler successivement les méthodes pour naviguer dans la structure (avec LireObjet) et lire les valeurs des noeuds.
En cas d'erreur pour chacune de ces méthodes, ErreurRendue sera à 1.
Methode LireObjet
Parametres : Chaine pCle
Se positionne sur un objet via son nom.
On peut descendre dans les enfants en les ajoutant via le séparateur ':'.
Si pCle commence par ':', on résout depuis la racine sinon on tient compte
de la position précédente. Alternative : laisser le paramètre vide pour revenir à la racine.
Si l'objet est un tableau, on pointe sur son premier élément.
Methode LireChaine
Parametres :
Chaine Reference pValeur
Chaine pCle
Lit la valeur de la clé indiquée.
Si la clé n'est pas à la racine, utiliser auparavant LireObjet.
Methode LireNumerique
Parametres :
Double Reference pValeur
Chaine pCle
Lit la valeur de la clé indiquée.
Si la clé n'est pas à la racine, utiliser auparavant LireObjet.
Methode LireBooleen
Parametres :
Entier Reference pValeur
Chaine pCle
Lit la valeur de la clé indiquée.
Si la clé n'est pas à la racine, utiliser auparavant LireObjet.
Methode LireTableauSuivant
Lit le prochain élément d'un tableau.
Il ne faut pas appeler cette méthode pour le premier élément d'un tableau.
Si la clé n'est pas à la racine, utiliser auparavant LireObjet.
Exemple
Variables :
Chaine vTitre, vAuteur
Double vPrix
AppliquerMethode LireObjet ("results")
// quand on rentre dans un tableau, on pointe directement sur son premier élément
AppliquerMethode LireChaine (vTitre, "titre")
AppliquerMethode LireNumerique (vPrix, "prix")
AppliquerMethode LireTableauSuivant
Si ErreurRendue Alors
// pas d'autre élément dans le tableau
Quitter
FinSi