PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2025 → JSON Vers Variant
JSON Vers Variant
Débuté par cbernard, 30 juil. 2024 10:37 - 3 réponses
Membre enregistré
47 messages
Posté le 30 juillet 2024 - 10:37
Bonjour à tous,

en m'inspirant de la documentations j'ai entrepris de créer une fonction qui permet de charger n'importe quel JSON dans un variant.

Procedure GetJson(table est une chaîne, Id est une chaîne, ListeChamps est une chaîne) //tabMonTablo est un tableau de chaînes

Trace("###############################################################################################################")
//Définition de le requete
maRequeteREST est un restRequête
maRequeteREST.Méthode = httpGet //select_all.php?search=
SI Taille(SAI_RECHERCHER) = 0 ALORS
maRequeteREST.URL = "https:xx/api/"+table+"/"+ Id +"/"+ gsApikey_private /
SINON
maRequeteREST.URL = "https:/xx/api/"+table+"/" + SAI_RECHERCHER + "/" + gsApikey_private
FIN

//Définition de la réponse
maReponseREST est une restRéponse = RESTEnvoie(maRequeteREST)

//Si réponse
SI maReponseREST..CodeEtat = 200 ALORS
MonJson est un JSON = maReponseREST.Contenu
//Info(MonJson.success + MonJson.message)

vJSON est un Variant = JSONVersVariant(MonJson)
QUAND EXCEPTIONEXCEPTION DANS
// Transforme le code source JSON

ParcoursMembresVariant(vJSON)


PROCEDURE INTERNE ParcoursMembresVariant(_ObjetOuTableau)

ListeChamps2 est une chaîne = ListeChamps


SELON _ObjetOuTableau..Type

CAS wlVariantObjet :

POUR TOUT _Membre de _ObjetOuTableau..Membre

SI _Membre..Membre..Occurrence = 0 ALORS

SELON _Membre..Type
CAS wlVariantTableau :

Trace("**********************") //DEBUT de l'enregistrement
ParcoursMembresVariant(_Membre)

AUTRES CAS :

SI (Contient(ListeChamps2,_Membre..Nom) = 1 ) ALORS
Trace(_Membre..Valeur)
FIN

FIN
SINON
Trace(Répète("--", ChaîneOccurrence(dbgInfo(dbgPile), RC)) +...
"Le membre " + _Membre..Nom + " a " +...
_Membre..Membre..Occurrence + " autres membres...")

Trace("bbbbbbbbbbbbbbbbbbbb")
ParcoursMembresVariant(_Membre)
FIN
FIN

CAS wlVariantTableau :


POUR TOUT ÉLÉMENT UnElement, Compteur de _ObjetOuTableau

Trace(Compteur +"/"+_ObjetOuTableau..Occurrence) // N° d'enregistrement

ParcoursMembresVariant(UnElement)
Trace("**********************") //Fin de l'enregistrement


FIN

AUTRES CAS : Trace("A gérer ("+_ObjetOuTableau..Type+") !?"+_ObjetOuTableau)
FIN
FIN

FAIRE
// Traitement à faire si le JSON est invalide
Erreur("Erreur de chargement des données Json")

FIN

SINON
Info("Erreur", "Problème de connection")

FIN




La fonction est appelée sur le clic d'un bouton.


//Définition des champs à remonter du JSON
ListeChamps est une chaîne = "Lien|ID"
GetJson("Liens","%20",ListeChamps)



Tout fonctionne parfaitement, je n'ai pas besoin de connaitre les balises du JSON appelées le trace remonte ce que je souhaite.
Les données sont remontées dans le trace ligne par ligne







Je bloque sur la possiblité de retourner les valeurs dans un tableau ou autre pour remplir une zone répétée d'une fenetre windev mobile.

Merci pour votre aide, vos pistes.
Membre enregistré
491 messages
Posté le 30 juillet 2024 - 11:36
Membre enregistré
47 messages
Posté le 30 juillet 2024 - 12:01
Merci Dimitri, exactement ce que je recherche.

je vais essayer d'adapter ce code à mon besoin mais j'ai compris l'idée.
Membre enregistré
47 messages
Posté le 30 juillet 2024 - 15:29
Je n’ai malheureusement pas le niveau pour adapter le code proposé .

Je suis passé par un tableau temporaire .

À la place d’un trace , je stocke dans champ table temporaire les données parsées puis avec une fonction je relis les données .
ça fonctionne bien mais pas très propre je trouve .


Je partagerai mes avancées si j’y arrive dans un second temps .

Merci pour le lien en tout cas .