PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → [WD25] Problème avec nom de rubrique json
[WD25] Problème avec nom de rubrique json
Débuté par Benoit MALHERBE, 30 oct. 2023 11:52 - 5 réponses
Membre enregistré
7 messages
Posté le 30 octobre 2023 - 11:52
Bonjour,
j'interroge une api qui me renvoie un json
{
  "siren": 830592028,
  "control_list": "gel,ppe",
  "beneficial-owners": [
    {
      "name": "John Doe",
      "birth_date": "10/1990",
      "participation": 50,
      "results": [
        {
          "id": "24032025_PPEIN_6502_98",
          "control_list": "gel",
          "name": "John Doe",
          "birth_date": "1977-12-21",
          "source": "Sanctions of OFAC",
          "accuracy": 98,
          "informations": "Identite : Important Person"
        },
        {
          "id": "24032025_PPEIN_6502_100",
          "control_list": "ppe",
          "name": "John Doe",
          "birth_date": "1977-12-21",
          "source": "PPE France",
          "accuracy": 100,
          "informations": "Identite : Président république..."
        }
      ]
    }
  ]
}

Le problème se pose au niveau de la "clé" beneficial-owners à cause du "-" dans le nom. Je n'arrive pas à en récupérer les valeurs car il y a un problème de compil.
Mon code :
Trace (Interro.Contenu)
Resultat = HTTPEnvoie(Interro)
jResultat = Resultat..Contenu
Trace (Resultat.CodeEtat)
Trace (jResultat)
Test est un Variant = JSONVersVariant(jResultat)
Trace(jResultat.siren)
Trace(jResultat.beneficial-owners)


Par avance merci de votre aide.
Bien cordialement.
Benoît
Membre enregistré
5 messages
Posté le 30 octobre 2023 - 12:48
Bonjour,

Tu peux utiliser les apostrophes ou les indirections :

Trace(jResultat.'beneficial-owners')

Trace({"jResultat.beneficial-owners"})
Membre enregistré
7 messages
Posté le 30 octobre 2023 - 13:06
Bonjour Michaël,

merci cela fonctionne.

Petite question subsidiaire :D
comment récupérer un json imbriqué dans un autre (beneficial-owners imbriqué dans mon json réponse ?

Par avance, merci.
Benoit
Membre enregistré
5 messages
Posté le 31 octobre 2023 - 09:28
Bonjour Benoit,

Simplement comme ceci :

Owners est JSON = jResultat.'beneficial-owners'


Cela te donnera un tableau de 1 JSON vu que dans ton exemple il n' y a qu'une occurence, sinon idem pour les results :

Results est JSON = Owners[1].results


Là tu aura un tableau de 2 json
Membre enregistré
3 895 messages
Popularité : +227 (347 votes)
Posté le 01 novembre 2023 - 09:43
Bonjour,
Une autre solution qui a l'avantage
-d'être universelle (ie de fonctionner en JSON, XML et binaire)
-d'être portable vers d'autres langages
est la désérialisation.
Initialisation
STResultat est une structure
siren est un entier
control_list est une chaîne
'beneficial-owners' est un tableau de 'STbeneficial-owners'
FIN

STresults est une structure
id est une chaîne
control_list est une chaîne
name est une chaîne
birth_date est une chaîne
'Source' est une chaîne //mot réservé donc ''
accuracy est un entier
informations est une chaîne
FIN

'STbeneficial-owners' est une structure
name est une chaîne
birth_date est une chaîne
participation est un entier
results est un tableau de STresults
FIN


Récupération des données :
stRes est STResultat
bufRéponse est un Buffer

bufRéponse=fChargeBuffer("ResJSON.JSON") //Simule le HTTPEnvoie
Désérialise(stRes,bufRéponse,psdJSON)

Trace(stRes:'beneficial-owners'[1].results[2].Name)


--
Il y a peut être plus simple, mais, ça tourne
Message modifié, 01 novembre 2023 - 09:47
Membre enregistré
7 messages
Posté le 09 novembre 2023 - 15:11
Bonjour,
merci pour vos réponses (désolé j'étais en vacances).

Bon dév.
Benoît