PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Afficher le contenu d'un JSON (donc tout type de structure) dans une table hiérarchique
Afficher le contenu d'un JSON (donc tout type de structure) dans une table hiérarchique
Débuté par Julien V, 09 oct. 2020 14:34 - 5 réponses
Membre enregistré
129 messages
Popularité : +20 (20 votes)
Posté le 09 octobre 2020 - 14:34
Bonjour,

Ci dessous un petit code pour alimenter une table hiérarchique avec un json.

Soit une table TABLE_JSON avec 3 colonnes
- COL_Numero qui reprend le numéro de ligne
- COL_JSON qui contient le nom du membre
- COL_Valeur qui contient uniquement la valeur du membre

Procedure lproc_initialiser()

JSON est un JSON

// Ici on met le contenu du json
// Exemple
//json = [
//{
// "glossary": {
// "title": "example glossary",
// "GlossDiv": {
// "title": "S",
// "GlossList": {
// "GlossEntry": {
// "ID": "SGML",
// "SortAs": "SGML",
// "GlossTerm": "Standard Generalized Markup Language",
// "Acronym": "SGML",
// "Abbrev": "ISO 8879:1986",
// "GlossDef": {
// "para": "A meta-markup language, used to create markup languages such as DocBook.",
// "GlossSeeAlso": ["GML", "XML"]
// },
// "GlossSee": "markup"
// }
// }
// }
// }
//}
//]
// Ou encore
//buffer est un buffer
//Sérialise( maStructure, buffer, psdJSON )
//json = buffer
JSON = _json

TableSupprimeTout( TABLE_JSON )
TABLE_JSON..AffichageActif = Faux
TABLE_JSON.COL_Numero..Couleur = GrisClair

iproc_maj_table_ligne( JSON, "json" )

TableDérouleTout( TABLE_JSON )
TableAjuste( TABLE_JSON )

TABLE_JSON..AffichageActif = Vrai

PROCEDURE INTERNE iproc_maj_table_ligne( LOCAL _membre est un JSON, LOCAL _nom est une chaîne, _iParent est un entier = 0 )

i, j, k, kMax est un entier
membre est un JSON

// Si _iParent = 0 alors on est dans le noeud racine
SI _iParent = 0 ALORS
i = TableAjouteLigne( TABLE_JSON )
SINON
i = TableAjouteFils( TABLE_JSON, _iParent )
FIN // SI _jParent = 0 ALORS

// Numéro de ligne
TABLE_JSON[ i ].COL_Numero = i
// Nom du membre json
TABLE_JSON[ i ].COL_JSON =_nom

// Si le membre contient des membres
SI TableauOccurrence( _membre..Membre ) > 0 ALORS

// C'est un nœud de type json
TABLE_JSON[ i ].COL_Valeur = "<json>"
TABLE_JSON[ i ].COL_Valeur..Etat = Grisé
TABLE_JSON[ i ]..ImageEnroulée = IMG_json_structure
TABLE_JSON[ i ]..ImageDéroulée = IMG_json_structure

// On parcourt les membres
POUR TOUT m de _membre..Membre

SI m..Type = wlVariantTableau ALORS

j = TableAjouteFils( TABLE_JSON, i )
TABLE_JSON[ j ].COL_Numero = j
TABLE_JSON[ j ].COL_JSON = m..Nom
TABLE_JSON[ j ]..ImageEnroulée = IMG_json_tableau
TABLE_JSON[ j ]..ImageDéroulée = IMG_json_tableau

kMax = m..Occurrence
POUR k = 1 À kMax

membre = m[ k ]
iproc_maj_table_ligne( membre, "[" + k + "]", j )

FIN // POUR k = 1 À kMax

SINON

iproc_maj_table_ligne( m, m..Nom, i )

FIN // SI m..Type = wlVariantObjet ALORS

FIN // POUR TOUT m de _membre..Membre

SINON SI _membre..Type = wlVariantTableau ALORS

TABLE_JSON[ i ]..ImageEnroulée = IMG_json_tableau
TABLE_JSON[ i ]..ImageDéroulée = IMG_json_tableau

kMax = _membre..Occurrence
POUR k = 1 À kMax

membre = _membre[ k ]
iproc_maj_table_ligne( membre, "[" + k + "]", i )

FIN // POUR k = 1 À kMax

SINON

TABLE_JSON[ i ].COL_Valeur = _membre..Valeur
TABLE_JSON[ i ]..ImageEnroulée = IMG_json_valeur
TABLE_JSON[ i ]..ImageDéroulée = IMG_json_valeur

FIN // SI TableauOccurrence( _membre..Membre ) > 0 ALORS

FIN // PROCÉDURE INTERNE iproc_maj_table_ligne( LOCAL _membre est un json, local _nom est une chaine, _iParent est un entier = 0 )

Résultat :



Voili voilou
Posté le 28 septembre 2022 - 13:08
Un immense merci pour ces heures de travail épargnées
Membre enregistré
123 messages
Popularité : +7 (9 votes)
Posté le 28 septembre 2022 - 14:57
Un tout grand merci !

--
Peter Holemans
www.mcs2.eu | www.pixontri.eu
Posté le 18 novembre 2022 - 17:48
Bonjour,

j'ai adapté la méthode pour qu'elle fonctionne avec windev 22 (il n'y a pas encore le type natif JSON dans windev 22)
Du coup j'ai utilisé le type "MembreVariant" à la place du type JSON.

_treeview => champs de type table hiérarchique
_json => chaine de caractères JSON ou directement une variable de type MembreVariant
_IMG_json_structure, _IMG_json_tableau, _IMG_json_valeur => champ image contenant les différents picto, pour customiser votre arborescence.


Procedure loadTreeview(_treeview,_json,_IMG_json_structure="",_IMG_json_tableau="",_IMG_json_valeur="")

JSON est un Variant
SI TypeVar(_json)=wlVariant ALORS
JSON=_json
SINON
JSON = JSONVersVariant(ChaîneVersUTF8(_json))

FIN

TableSupprimeTout( _treeview )

_treeview..AffichageActif = Faux
_treeview.COL_Numero..Couleur = GrisClair

iproc_maj_table_ligne(_treeview, JSON, "json",0,_IMG_json_structure,_IMG_json_tableau,_IMG_json_valeur)

TableDérouleTout( _treeview )
TableAjuste( _treeview )

_treeview..AffichageActif = Vrai

PROCEDURE INTERNE iproc_maj_table_ligne( _treeview2, LOCAL _membre est un MembreVariant, LOCAL _nom est une chaîne, _iParent est un entier = 0,_IMG_json_structure2="",_IMG_json_tableau2="",_IMG_json_valeur2="" )



i, j, k, kMax est un entier
membre est un Variant
membre2 est un MembreVariant
// Si _iParent = 0 alors on est dans le noeud racine
SI _iParent = 0 ALORS
i = TableAjouteLigne( _treeview2 )
SINON
i = TableAjouteFils( _treeview2, _iParent )
FIN // SI _jParent = 0 ALORS

// Numéro de ligne
_treeview2[ i ].COL_Numero = i
// Nom du membre json
_treeview2[ i ].COL_JSON =_nom

// Si le membre contient des membres
SI TableauOccurrence( _membre..Membre ) > 0 ALORS

// C'est un nœud de type json
_treeview2[ i ].COL_Valeur = "<json>"
_treeview2[ i ].COL_Valeur..Etat = Grisé
_treeview2[ i ]..ImageEnroulée = _IMG_json_structure2
_treeview2[ i ]..ImageDéroulée = _treeview2[ i ]..ImageEnroulée

// On parcourt les membres
POUR TOUT m de _membre..Membre

SI m..Type = wlVariantTableau ALORS

j = TableAjouteFils( _treeview2, i )
_treeview2[ j ].COL_Numero = j
_treeview2[ j ].COL_JSON = m..Nom
kMax = m..Occurrence
POUR k = 1 A kMax
membre2 = m[ k ]
iproc_maj_table_ligne( _treeview2,membre2, "[" + k + "]", j,_IMG_json_structure2,_IMG_json_tableau2,_IMG_json_valeur2 )
FIN // POUR k = 1 À kMax
SINON
iproc_maj_table_ligne(_treeview2, m, m..Nom, i,_IMG_json_structure2,_IMG_json_tableau2,_IMG_json_valeur2 )
FIN // SI m..Type = wlVariantObjet ALORS
FIN // POUR TOUT m de _membre..Membre
SINON SI _membre..Type = wlVariantTableau ALORS
_treeview2[ i ]..ImageEnroulée = _IMG_json_tableau2
_treeview2[ i ]..ImageDéroulée = _treeview2[ i ]..ImageEnroulée
kMax = _membre..Occurrence
POUR k = 1 A kMax
membre = _membre[ k ]
iproc_maj_table_ligne(_treeview2, membre, "[" + k + "]", i ,_IMG_json_structure2,_IMG_json_tableau2,_IMG_json_valeur2)
FIN // POUR k = 1 À kMax
SINON
_treeview2[ i ].COL_Valeur = _membre
_treeview2[ i ]..ImageEnroulée =_IMG_json_valeur2
_treeview2[ i ]..ImageDéroulée = _treeview2[ i ]..ImageEnroulée
FIN // SI TableauOccurrence( _membre..Membre ) > 0 ALORS

FIN // PROCÉDURE INTERNE iproc_maj_table_ligne( LOCAL _membre est un json, local _nom est une chaine, _iParent est un entier = 0 )


Cldt,
Florent
Membre enregistré
1 299 messages
Popularité : +20 (72 votes)
Posté le 10 février 2023 - 17:18
Merci pour ce partage

--
Bertin CARRIERE
SRL RGPD.Zen-Project.be
support@zen-project.be
www.zen-project.be www.linkedin.com/in/bertincarriere

+32(0)498/10.18.58
Co-President de l'asbl Be-Dev Association des développeurs Windev de Belgique
www.be-dev.be
Membre enregistré
135 messages
Popularité : +8 (8 votes)
Posté le 20 avril 2023 - 07:18
Bonjour,

Merci pour le partage, simple, rapide, efficace..

--
Dominique DAUSSY
http://www.serviceinfo76.com
Développeur de votre solution Windev, WebDev et Windev Mobile