PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV (versiones precedentes) → Désérialiser un résultat httpGET JSON
Désérialiser un résultat httpGET JSON
Iniciado por OLIVIER, 03,ago. 2022 16:13 - 4 respuestas
Miembro registrado
10 mensajes
Publicado el 03,agosto 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}
Miembro registrado
3.845 mensajes
Popularité : +227 (347 votes)
Publicado el 04,agosto 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
Miembro registrado
10 mensajes
Publicado el 06,agosto 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
Miembro registrado
3.845 mensajes
Popularité : +227 (347 votes)
Publicado el 06,agosto 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
Mensaje modificado, 06,agosto 2022 - 19:50
Miembro registrado
10 mensajes
Publicado el 09,agosto 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.