|
| Création d'un JSON récursif a partir d'un tableau |
| Débuté par Christian, 14 nov. 2023 19:42 - 1 réponse |
| |
| | | |
|
| |
Membre enregistré 13 messages |
|
| Posté le 14 novembre 2023 - 19:42 |
Bonjour, J'essaie de créer un JSON récursif a partir d'un tableau qui contient mes données. Les données ont un lien parent-enfant...
C'est la récursivité qui pose problème, je ne suis arrivé qu'à faire mon JSON mais chaque élément est repris dans le JSON comme étant l'enfant du précédent... Or ce n'est pas la structure de mon tableau..
Mon tableau (simplifié ici au maximum)

Et le résultat que je souhaite obtenir
{ "Libelle": "Famille", "Type": "R", "Enfants": [ { "Libelle": "Membre1", "Type": "M", "Enfants": [ { "Libelle": "Enfant1", "Type": "M", "Enfants": [ { "Libelle": "PetitEnfant1", "Type": "M" } ] } ] }, { "Libelle": "Membre2", "Type": "M" }, { "Libelle": "Membre3", "Type": "M", "Enfants": [ { "Libelle": "Enfant2", "Type": "M" }, { "Libelle": "Enfant3", "Type": "M", "Enfants": [ { "Libelle": "PetitEnfant1", "Type": "M" } ] } ] } ] } |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 334 messages |
|
| Posté le 15 novembre 2023 - 16:14 |
Bonjour, Pour régler un problème de récursivité, il faut utiliser une fonction récursive (étonnant non ?) L'extrait de MLD qui correspond aux infos que tu nous donnes ressemble à ça :

On en déduit la classe correspondante
CMembre est une Classe <MAPPING=Membre> m_pkMembre est un entier sur 8 octets ,mapping=PK_Membre,Sérialise="IDMembre" m_saType est une chaîne ,mapping=NDX_Type,Sérialise="Type" m_saLibellé est une chaîne ,mapping=Libellé,Sérialise="Libellé" m_pkParents est entier sur 8,mapping=FK_Parent,Sérialise="Parent" m_tabEnfants est un tableau de CMembre FIN La difficulté est de remplir m_tabEnfants qui va avoir des m_tabEnfants.m_tabEnfants etc C'est là que va intervenir la méthode récursive.
Les enfant peuvent être obtenus grâce à la requête suivante :
SELECT Membre.PK_Membre AS PK_Membre, Membre.NDX_Type AS NDX_Type, Membre.Libellé AS Libellé, Membre.FK_Parent AS FK_Parent FROM Membre WHERE Membre.FK_Parent = {pParent}
La méthode (récursive) ListerEnfant de la classe CMembre devient donc :
Procedure ListerEnfants() clEnfant est CMembre
REQ_Enfants.pParent=:m_pkMembre HExécuteRequête(REQ_Enfants) SI HNbEnr(REQ_Enfants) ALORS FichierVersTableau(:m_tabEnfants,REQ_Enfants) POUR TOUT clEnfant de :m_tabEnfants clEnfant:ListerEnfants() FIN FIN
Grâce à cela, on va pouvoir remplir un tableau de membres, pour obtenir le JSON, il suffira de sérialiser.
tabMaFamille est tableau de CMembre clUnMembre est CMembre bufJSON est Buffer
FichierVersTableau(tabMaFamille,Membre)
POUR TOUT clUnMembre de tabMaFamille clUnMembre:ListerEnfants() FIN
Sérialise(tabMaFamille,bufJSON,psdJSON)
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | | | |
| | |
|