12
votes

Création d'un arbre JSON à partir d'une hiérarchie à cordes

Compte tenu de ces 4 variables,

{
    "text":"europe",
    "leaf":false,
    "children":[
        {
            "text":"spain",
            "leaf":false,
            "children":[
                {
                    "text":"realmadrid",
                    "leaf":false,
                    "children":[
                        {
                            "text":"ronaldo",
                            "leaf":true
                        }
                    ]
                },
                {
                    "text":"barcelona",
                    "leaf":false,
                    "children":[
                        {
                            "text":"messi",
                            "leaf":true
                        }
                    ]
                }
            ]
        },
        {
            "text":"england",
            "leaf":false,
            "children":[
                {
                    "text":"unknown english",
                    "leaf":true
                },
                {
                    "text":"liverpool",
                    "leaf":false,
                    "children":[
                        {
                            "text":"gerald",
                            "leaf":true
                        }
                    ]
                }
            ]
        }
    ]
}


0 commentaires

3 Réponses :


15
votes

Ce serait Waaay plus facile si l'EL1-EL4 était associé à un seul objet, comme

var tree = {};
function fillTree(name,steps) {
   var current = null,
   existing = null,
   i = 0;
   for (var y = 0; y < steps.length; y++) {
      if (y==0) {
         if (!tree.children||typeof tree.children == 'undefined'){
            tree = { text: steps[y], leaf: false, children: [] };
         }
         current = tree.children;
      } else {
         existing = null;
         for (i=0; i < current.length; i++) {
            if (current[i].text === steps[y]) {
               existing = current[i];
               break;
            }
         }
         if (existing) {
            current = existing.children;
         } else {
            current.push({ text: steps[y], leaf: false, children: [] });
            current = current[current.length - 1].children;
         }
      }
   }
   current.push({ text: name, leaf: true })
}


3 commentaires

Merci Jordan, mais l'Europe ne devrait avoir que 2 enfants (Espagne et Angleterre)


@Demmenc merci! Si vous avez une excellente solution vous-même, veuillez le poster.


Le code que j'ai écrit prend l'entrée donnée et crée exactement la sortie souhaitée. La seule différence est qu'elle est sortie comme une structure JavaScript, que l'OP est libre de convertir en JSON en utilisant la méthode qu'il souhaite. Au cas où vous vous demandiez, critiquer de manière irréghant que la réponse de quelqu'un d'autre n'est pas un excellent moyen de les amener motivé à répondre à une de vos propres questions.



0
votes

Si vous acceptez d'avoir des enfants comme objet / hachage au lieu de la matrice, voici ma solution basée sur la Jordan's HTTPS: // Stackoverflow .COM / A / 2299268/214420 xxx


0 commentaires

0
votes

Créez votre réseau de données plat et que le processus sur les données pour rechercher JSON imbriquée

comme xxx

puis processus de processus xxx


0 commentaires