PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Structure , variant et JSON
Structure , variant et JSON
Débuté par Michel GARCIA, 18 déc. 2019 12:19 - 6 réponses
Membre enregistré
409 messages
Posté le 18 décembre 2019 - 12:19
Bonjour à tous,

Je sèche sur un point en relation avec des structures, variants et JSON. Il s'agit de pouvoir déterminer plusieurs lieux, avec latitude, longitude, en utilisant une structure pour créer un tableau des divers lieux

Typiquement le fichier à traiter en JSON doit être ainsi :

"locations":[
{
"name":"Montanejos",
"lat":40.064012,
"lon":-0.523261}
]

Mon code est :

// Pour vérification du format
gLOCATION est un JSON
gLOCATION.locations[1].name = "Montanejos"
gLOCATION.locations[1].lat = 40.064012
gLOCATION.locations[1].lon = -0.523261

// Description de la structure et du tableau
STLocation est une structure
name est une chaîne
lat est un entier
lon est un entier
FIN
gtabLocations est un tableau de STLocation
gstSingleLocation est un STLocation

POUR i=1 À 3
gstSingleLocation.name = "Test " + i
gstSingleLocation.lat = 40.064012 + i
gstSingleLocation.lon = -0.523261 +i

TableauAjoute(gtabLocations,gstSingleLocation)
FIN

Info("JSON = ", gLOCATION)

gLocationData est un JSON = gtabLocations
Info("Tableau de STructure à JSON =",gLocationData)


Les données sont bien passées pour le format JSON lorsque la variable est définie de type JSON, mais lors du passage de la tableau de structure à JSON, le terme "locations" n'apparaît pas.

JUSTE:





FAUX:





J'ai essayé de créer un tableau de type "locations.nom", "locations.lat", "locations.lon" mais WD n'autorise pas cela, et je n'ai plus d'idées par où chercher... J'ai testé avec les variants, même problème.

Si vous avez une idée ou solution, elle sera la bienvenue.
Merci, Michel

--
If it works, don't touch it, don't look at it, AND don't fix it ! No patches, no SP ! JUST DONT FIX IT.
Membre enregistré
1 640 messages
Posté le 18 décembre 2019 - 12:45
Hello, ca devrait marcher :
// Pour vérification du format
gLOCATION est un JSON
gLOCATION.locations[1].name = "Montanejos"
gLOCATION.locations[1].lat = 40.064012
gLOCATION.locations[1].lon = -0.523261

// Description de la structure et du tableau
STLocation est une structure, Sérialise = "Locations"
name est une chaîne
lat est un entier
lon est un entier
FIN
STLoc est une structure
locations est un tableau de STLocation
FIN
gtabLocations est un STLoc
gstSingleLocation est un STLocation, Sérialise = "location"

POUR i=1 À 3
gstSingleLocation.name = "Test " + i
gstSingleLocation.lat = 40.064012 + i
gstSingleLocation.lon = -0.523261 +i

TableauAjoute(gtabLocations.locations,gstSingleLocation)
FIN

Info("JSON = ", gLOCATION)

gLocationData est un JSON = gtabLocations
Info("Tableau de STructure à JSON =",gLocationData)


Il d'abord creer une structure maitresse STloc qui va contenir le tableau de structure pour obtenir ce que tu veux.
Membre enregistré
1 640 messages
Posté le 18 décembre 2019 - 12:49
Edit :

STLocation est une structure, Sérialise = "Locations"
name est une chaîne
lat est un réel
lon est un réel
FIN


Réel a la place d'entiers pour les lng et lat
Membre enregistré
409 messages
Posté le 18 décembre 2019 - 13:50
Bonjour François C. ! Merci beaucoup, ça marche d'enfer !

Juste pour les réels en lieu et place des entiers, j'avais corrigé dans le code, mais pas sur le forum.

Que tu sois béni jusqu'à la 17ème génération, au moins ! ;)
Michel

--
If it works, don't touch it, don't look at it, AND don't fix it ! No patches, no SP ! JUST DONT FIX IT.
Membre enregistré
512 messages
Posté le 18 décembre 2019 - 15:44
Bonjour,

J'arrive un peu tard pour proposer une solution basée sur le type variant avec sous-éléments nommés et indicés imbriqués.

vLocations est un Variant

POUR i = 1 A 3
vLocations.locations[i].name = "Test " + i
vLocations.locations[i].lat = 0n40.064012 + i
vLocations.locations[i].lon = -0n0.523261 + i
FIN

Info("JSON = " + VariantVersJSON(vLocations))


Le type variant du WLangage est flexible. En partant d'une variable de type variant non-initialisée, il est possible de construire dynamiquement une structure de données complexe qui peut ensuite être simplement "convertie" au format textuel JSON.
https://doc.pcsoft.fr/fr-FR/?1514019&name=Type_Variant

:-)

P.S. la valeur numérique des membres .lat et .lon est en notation numérique (préfixe 0n) et force un type numérique.
Message modifié, 18 décembre 2019 - 15:47
Membre enregistré
1 640 messages
Posté le 18 décembre 2019 - 15:50
Oui mais bon visiblement il voulait utiliser le type JSON ;)
Membre enregistré
409 messages
Posté le 18 décembre 2019 - 16:12
Merci à tous les deux... C'est surtout que je dois récupérer un nombre inconnu de paramètres (lieu, lat, lon) pour pouvoir faire un jeu de piste / chasse au trésor sur le Droid... (en lien avec Gogole Maps)...

Donc, pour l'instant je teste avec les Structures, je regarde après avec les variants... Apprendre un jour, apprendre toujours... Merci Aspro (avec ou sans Vitamine C)! ;)

--
If it works, don't touch it, don't look at it, AND don't fix it ! No patches, no SP ! JUST DONT FIX IT.
Message modifié, 18 décembre 2019 - 16:14