PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV (précédentes versions) → Comment connaitre la structure d'un enregistrement JSON?
Comment connaitre la structure d'un enregistrement JSON?
Débuté par Jose Dubois, 23 fév. 2021 17:21 - 6 réponses
Posté le 23 février 2021 - 17:21
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
Posté le 23 février 2021 - 18:13
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
Membre enregistré
473 messages
Popularité : +20 (20 votes)
Posté le 23 février 2021 - 20:05
Posté le 23 février 2021 - 22:30
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!
Posté le 24 février 2021 - 12:04
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.
Membre enregistré
945 messages
Popularité : +53 (63 votes)
Posté le 26 février 2021 - 16:30
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

PROCEDURE 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
Membre enregistré
286 messages
Popularité : +24 (28 votes)
Posté le 27 février 2021 - 14:33
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