PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WEBDEV (earlier versions) → Comment connaitre la structure d'un enregistrement JSON?
Comment connaitre la structure d'un enregistrement JSON?
Started by Jose Dubois, Feb., 23 2021 5:21 PM - 6 replies
Posted on February, 23 2021 - 5:21 PM
Bonjour,

Je peux parcourir les données de l'enregistrement avec .Membre mais je n'ai pas trouvé comment parcourir la structure, par exemple, j'obtiens facilement la valeur 2 si je connais le membre cdrvoicemail dans l'enregistrement partiel suivant mais comment connaître l'élément "cdrvoicemail" si j'ignore la structure?

{"server_name":"RNT Inc","tenantcode":"999","package_id":"5","glocomproxy":null,"absolutetimeout":"14400","cdrvoicemail":"2","faxformat":"letter","faxfiletype":"1"

Merci d'avance!

JD
Posted on February, 23 2021 - 6:13 PM
je ne sais pas s'il y a une fonction json spécifique pour ca, mais en tous les cas, un json est juste un foichier de chaines, et donc extratichaine peut extraire tous les éléments
Registered member
188 messages
Posted on February, 23 2021 - 8:05 PM
Posted on February, 23 2021 - 10:30 PM
Merci! En passant j'ai trouvé ceci qui répond non seulement à toutes mes questions sur l'analyse d'un enregistrement JSON mais qui en plus utilise une procédure interne avec la récursivité. Du beau code.

https://blogs.pcsoft.fr/fr/extraire-simplement-donnees-json-dont-structure-connue-avance/353/read.awp

Merci encore!
Posted on February, 24 2021 - 12:04 PM
Et donc encore une fois un exemple qui montre ce qu'il ne faut surtout PAS faire dans la vrai vie...

La récursivité est officiellement NON supportée en wlanguage.

Ca fonctionne, oui, mais le nombre de 'tours' que tu peux effectuer avant que ton programme explose est :
- Faible
- TRES différent selon les versions (le maximum que j'ai trouvé quand je faisais des tests était 600 niveaux, et c'est descendu à 128 la version d'après)

Fais une simple boucle récursive qui compte et fait un trace de la valeur et tu verras par toi même le crash spectaculaire...

Donc cet exemple va fonctionner tant que la structure du json est simple ET tu ne l'appelles pas depuis quelque part qui est déjà très profond dans la pile des appels...

Donc, fais de la récursivité si tu veux ne jemais savoir si ton programme va planter ou pas quand tu passes à la nouvelle version, ou quand tu appelle ton code depuis quelque part ailleurs.
Registered member
726 messages
Posted on February, 26 2021 - 4:30 PM
Bonjour,

sJSon est une chaîne ANSI = [
{
"Membre1": "Valeur Membre 1",
"Membre2": "Valeur Membre 2",
"Membre3": "Valeur Membre 3",
"Membre 4": {
"Membre 5": {
"Membre 6": 6,
"Membre 7": "Valeur Membre 7"
},
"Membre 8": {
"Membre 9": 9,
"Membre 10": "Valeur Membre 10"
}
}
}
]

soit vjs = JSONVersVariant(sJSon)

POUR TOUT _Membre DE vjs..Membre

SI _Membre..Membre..Occurrence = 0 ALORS
Trace("Le membre " + _Membre..Nom + " a la valeur " + _Membre..Valeur)
SINON
Trace("Le membre " + _Membre..Nom + " a " + _Membre..Membre..Occurrence + ...
" autres membres")
ParcoursMembresVariant(_Membre)
FIN
FIN

PROCÉDURE INTERNE ParcoursMembresVariant(x)

POUR TOUT _Membre DE x..Membre
SI _Membre..Membre..Occurrence = 0 ALORS
Trace(Répète("--", ChaîneOccurrence(dbgInfo(dbgPile), RC)) + ...
"Le membre " + _Membre..Nom + " a la valeur " + _Membre..Valeur)
SINON
Trace(Répète("--", ChaîneOccurrence(dbgInfo(dbgPile), RC)) + ...
"Le membre " + _Membre..Nom + " a " + _Membre..Membre..Occurrence + ...
" autres membres...")
ParcoursMembresVariant(_Membre)
FIN
FIN
FIN


Vu ici : https://doc.pcsoft.fr/fr-fr/?1000021296&name=jsonversvariant_fonction

jordan
Registered member
63 messages
Posted on February, 27 2021 - 2:33 PM
Bonjour

Je me suis permis d'ajouter la notion de "tableau" :-)

PROCÉDURE INTERNE ParcoursMembresVariant(x)
sListeValeurs est une chaîne
POUR TOUT _Membre DE x..Membre
SI _Membre..Membre..Occurrence = 0 ALORS
SI (_Membre..Type <> wlVariantTableau ) ALORS
Trace(Répète("--", ChaîneOccurrence(dbgInfo(dbgPile), RC)) + "Le membre " + _Membre..Nom + " a la valeur " + _Membre..Valeur)
SINON
sListeValeurs = ""
POUR TOUT cellule DE _Membre
sListeValeurs += cellule + ","
FIN
Trace(Répète("--", ChaîneOccurrence(dbgInfo(dbgPile), RC)) + "Le membre " + _Membre..Nom + " a pour valeur " + sListeValeurs)
FIN
SINON
Trace(Répète("--", ChaîneOccurrence(dbgInfo(dbgPile), RC)) + ...
"Le membre " + _Membre..Nom + " a " + _Membre..Membre..Occurrence + " autres membres...")
ParcoursMembresVariant(_Membre)
FIN
FIN

FIN