IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Génération d'une hiérarchie JSON


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut Génération d'une hiérarchie JSON
    Bonjour,

    J'ai un petit soucis j'essai de générer une arborescence en JSON.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    function convertToHierarchy(arry)
    {
    var item, path;
     
    var children = {};
    var hasParent = {};
     
    //Liste les utilisateurs
    for (var i = 0; i < arry.length; i++)
    {
    var path = arry[i];
    var parent = null;
     
     
    var manager = path[0];
    var account = path[1];
    var title = path[2];
     
     
     
    if (!children[manager]) {
    if (manager != "")
    {
    children[manager] = {};
    }
    }
     
    /* if (parent) {
     
    children[parent][manager] = true;
    hasParent[manager] = true;
    }*/
     
    parent = manager;
     
     
     
    /* if (account != "")
    {
    children[account] = {};
    children[account].title = title;
    }*/
     
     
    //children[account] = {title: title};
    if (parent) {
    children[parent][account] = true;
    hasParent[account] = true;
    //children[account] = {};
    children[parent][account].title = title;
     
    }
     
     
     
     
     
     
     
    }
     
    /* sResults = JSON.stringify(children, null, 2);
    alert(sResults);*/
     
    //Construction de la hierarchie
    var result = {id:"", title:"", items:[]};
     
     
    for (item in children) {
    if (!hasParent[item]) {
    result.id = buildNodeRecursive(item, children, item.title).id;
    result.title = buildNodeRecursive(item, children, item.title).title;
    result.items.push(buildNodeRecursive(item, children, item.title));
    }
    }
     
     
    return result;
    }
     
    function buildNodeRecursive(item, children, title)
    {
    var node = {id:item, title:title, items:[]};
    for (var child in children[item]) {
    node.items.push(buildNodeRecursive(child, children, title));
    }
    return node;
     
     
    }
     
    sResults = JSON.stringify(convertToHierarchy([["C.HOGAN","H.VIRON", "Henry VIRON"], ["K.TOIF", "G.DURANT", "Gerard DURANT"], ["", "C.HOGAN", "Charles HOGAN"], ["C.HOGAN","K.TOIF", "Karim TOIF"], ["G.DURANT","T.MENES", "Thierry MENES"]]), null, 2);
    alert(sResults);
    Je n'arrive pas à générer correctement l'arborescence.


    Pourriez-vous m'aider ?

    Merci d'avance

  2. #2
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Je n'arrive pas à générer correctement l'arborescence.
    C'est un peu vague ... peux-tu détailler ? A l'heure actuelle, voici ce qui est généré à partir de ton tableau d'entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    {
      "id": "C.HOGAN",
      "items": [
        {
          "id": "C.HOGAN",
          "items": [
            {
              "id": "H.VIRON",
              "items": []
            },
            {
              "id": "K.TOIF",
              "items": [
                {
                  "id": "G.DURANT",
                  "items": [
                    {
                      "id": "T.MENES",
                      "items": []
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
    Donne nous l'arborescence cible, que l'on puisse t'aiguiller.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Merci d'avoir répondu Kaamo !

    J'obtiens un doublon sur le manager principal et je n'arrive pas à intégrer le nom complet de chaque utilisateur.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    {
          "id": "C.HOGAN",
          "title": "Charles HOGAN",
          "items": [
            {
              "id": "H.VIRON",
              "title": "Henry VIRON",
              "items": []
            },
            {
              "id": "K.TOIF",
              "title": "Karim TOIF",
              "items": [
                {
                  "id": "G.DURANT",
                  "title": "Gerard DURANT",
                  "items": [
                    {
                      "id": "T.MENES",
                      "title": "Thierry MENES",
                      "items": []
                    }
                  ]
                }
              ]
            }
          ]
    }
    Merci d'avance.

  4. #4
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Et ce tableau que tu fournis en paramètre de la fonction : [["C.HOGAN","H.VIRON", "Henry VIRON"], ["K.TOIF", "G.DURANT", "Gerard DURANT"], ["", "C.HOGAN", "Charles HOGAN"], ["C.HOGAN","K.TOIF", "Karim TOIF"], ["G.DURANT","T.MENES", "Thierry MENES"]]
    Est-il imposé ? Si j'ai bien compris, la 1ère entrée de chaque tableau est le parent de l'entrée n°2. La 3ème entrée quant à elle est le nom complet de la 2ème ?
    ["C.HOGAN","H.VIRON", "Henry VIRON"] : "C.HOGAN" est le parent de H.VIRON qui s'appelle Henry VIRON.
    ["", "C.HOGAN", "Charles HOGAN"] : C.HOGAN qui s'appelle Charles HOGAN n'a pas de parent direct.

    Un enfant peut-il avoir plusieurs parents ?

    Si tu as la main sur ce tableau d'entrée, c'est d'abord lui qu'il faut modifier, je pense, pour ensuite construire simplement l'arborescence comme tu l'entends. Je vois un truc dans le genre en paramètre d'entrée de la fonction :

    - D'une part, un tableau recensant toutes les entités (leur ID (unique), leur nom complet) :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var annuaire = [
      {id : "H.VIRON", nom : "Henry VIRON"},
      {id : "C.HOGAN", nom : "Charles HOGAN"},
      {id : "K.TOIF", nom : "Karim TOIF"},
      {id : "G.DURANT", nom : "Gerard DURANT"},
      {id : "T.MENES", nom : "Thierry MENES"}
    ];
    - D'autres parts, un tableau qui associe à chaque entité d'autres entités :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var assoc = [
      {id: "", enfants: ["C.HOGAN"]},
      {id: "C.HOGAN", enfants: ["H.VIRON", "K.TOIF"]},
      {id: "K.TOIF", enfants: ["G.DURANT", "T.MENES"]}
    ];

    Mais je dois avouer que je n'ai peut-être pas compris ton besoin premier ?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Merci Kaamo !

    Helas je n'ai pas le contrôle du tableau d'entré.

    Je cherche tout simplement à générer cette arborescence qui est en réalité bien plus grande que celle-ci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    {
          "id": "C.HOGAN",
          "title": "Charles HOGAN",
          "items": [
            {
              "id": "H.VIRON",
              "title": "Henry VIRON",
              "items": []
            },
            {
              "id": "K.TOIF",
              "title": "Karim TOIF",
              "items": [
                {
                  "id": "G.DURANT",
                  "title": "Gerard DURANT",
                  "items": [
                    {
                      "id": "T.MENES",
                      "title": "Thierry MENES",
                      "items": []
                    }
                  ]
                }
              ]
            }
          ]
    }
    Cependant je bloque sur les points cités plus haut.

    Merci de ton aide.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    J'ai essayé plusieurs méthode mais je n'arrive pas a y intégrer l'élément "title".

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Merci finalement j'ai trouvé

  8. #8
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Je dois avouer ne pas avoir eu le temps d'analyser plus en profondeur depuis.

    Il aurait été plus judicieux pour la communauté de partager la solution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Génération d'une hiérarchie de classe
    Par yashiro dans le forum Hibernate
    Réponses: 0
    Dernier message: 13/09/2010, 17h51
  2. Génération d'une clé unique aléatoire
    Par DeadSoul dans le forum Oracle
    Réponses: 6
    Dernier message: 01/12/2005, 11h07
  3. Génération d'une hash de hash de tableau
    Par antigone dans le forum Langage
    Réponses: 3
    Dernier message: 01/09/2005, 19h18
  4. Génération d'une clé de contrôle sur un nombre
    Par soulryo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/02/2005, 14h50
  5. [Javadoc] Génération d'une javadoc pour un package
    Par Katyucha dans le forum Langage
    Réponses: 3
    Dernier message: 16/11/2004, 11h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo