PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Désérialiser un résultat httpGET JSON
Désérialiser un résultat httpGET JSON
Débuté par OLIVIER, 03 aoû. 2022 16:13 - 4 réponses
Membre enregistré
10 messages
Posté le 03 août 2022 - 16:13
Bonjour,
je ne parviens pas à trouver ou se situe mon erreur dans ce code sous WINDEV20.
Il s'agit pour moi de récupérer les coordonnées géographiques renvoyées par la requête httpGET.
Je bugge au moment de la désérialisation du JSON retourné.
Merci de votre aide.

ReqRecherche est un restRequête
ReqRésultat est un restRéponse
varVariant est un Variant

ReqRecherche.URL = "https://api-adresse.data.gouv.fr/search/?q="

PROCEDURE INTERNE AjouteParametre(pURL, Pcontenu)
SI Contient(pURL,"+") = Vrai ALORS
RENVOYER pURL + "+" + Pcontenu
SINON
RENVOYER pURL + Pcontenu
FIN
FIN

ReqRecherche.URL = AjouteParametre(ReqRecherche.URL,"le+capitole+31000+toulouse")
Trace(ReqRecherche.URL)

ReqRecherche.Méthode = httpGet

ReqRésultat = RESTEnvoie(ReqRecherche)
Trace(ReqRésultat.Contenu)

SI ErreurDétectée() ALORS
Erreur(ErreurInfo(errComplet))
SINON
varVariant = JSONVersVariant(ReqRésultat.Contenu)
Trace(varVariant.features[1].geometry)
FIN

Voici le JSON retourné :

{"type": "FeatureCollection", "version": "draft", "features": [{"type": "Feature", "geometry": {"type": "Point", "coordinates": [1.443107, 43.604178]}, "properties": {"label": "Place du Capitole 31000 Toulouse", "score": 0.6813681818181818, "id": "31555_1676", "name": "Place du Capitole", "postcode": "31000", "citycode": "31555", "x": 574268.42, "y": 6279586.71, "city": "Toulouse", "context": "31, Haute-Garonne, Occitanie", "type": "street", "importance": 0.74505}}, {"type": "Feature", "geometry": {"type": "Point", "coordinates": [1.449479, 43.602505]}, "properties": {"label": "Promenade des Capitouls 31000 Toulouse", "score": 0.48250782705099776, "id": "31555_1677", "name": "Promenade des Capitouls", "postcode": "31000", "citycode": "31555", "x": 574779.29, "y": 6279390.68, "city": "Toulouse", "context": "31, Haute-Garonne, Occitanie", "type": "street", "importance": 0.69783}}], "attribution": "BAN", "licence": "ETALAB-2.0", "query": "le capitole 31000 toulouse", "limit": 5}
Membre enregistré
3 845 messages
Popularité : +227 (347 votes)
Posté le 04 août 2022 - 03:14
Bonjour,
Il suffit de créer les classes ou structures nécessaires (normalement elle est dans la doc, sinon on décortique à la main
STgeometry est une structure
type est une chaîne
coordinates est un tableau de chaînes
FIN

STproperties est une structure
label est une chaîne
score est un numérique
id est une chaîne
name est une chaîne
postcode est une chaîne
citycode est une chaîne
x est un numérique
y est un numérique
city est une chaîne
context est une chaîne
type est une chaîne
importance est un numérique
FIN

STfeatures est une structure
type est une chaîne
geometry est un STgeometry
properties est un STproperties
FIN

STRESULT est une structure
type est une chaîne
version est une chaîne
features est un tableau de STfeatures
attribution est une chaîne
licence est une chaîne
query est une chaîne
limit est un entier
FIN

Resultat est un STResult
)

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
10 messages
Posté le 06 août 2022 - 15:45
Bonjour et merci.
J'ai bien ça aussi mais je ne comprends pas ou je fais une erreur dans mon code.
Pourriez-vous m'aider un peu ?
Merci
Olivier
Membre enregistré
3 845 messages
Popularité : +227 (347 votes)
Posté le 06 août 2022 - 19:41
La réponse est dans ta question : il faut désérialiser.
JSONVersVariant est inutile une fois qu'on à la structure/classe
...
Désérialise(Résultat,ReqRésultat.Contenu,psdJSON)

On voit par ailleurs que geometry est une structure, il faut donc accéder à ses membres pour les afficher (type et coordinate qui est lui même un tableau qu'il va falloir parcourir.)

--
Il y a peut être plus simple, mais, ça tourne
Message modifié, 06 août 2022 - 19:50
Membre enregistré
10 messages
Posté le 09 août 2022 - 20:49
Un grand merci pour ces explications. J'ai enfin compris. Dur dur à 50 ans de raccrocher les wagonnets !
Bon ça fonctionne très bien maintenant.