2017-06-22 9 views
0

Versuch, verschachtelte JSON-Daten (data1) in das "richtige" Format (data2) mit bisherigem Erfolg zu restrukturieren.JavaScript :: Durch geschachteltes JSON-Objekt Iterieren und neue Struktur erstellen

data1 wird basierend auf einem gegebenen übergeordneten Verzeichnis (Rezepte) generiert, das nach HTML-Dateien sucht.

data2 ist was ich versuche mit data1 Ausgabe seit was Inhalt in einem Ordner ist besser als Array von Objekten als nur reine verschachtelte Objekte dargestellt.

var data1 = { 
    "cake": { 
     "chocolate": { 
     "black-forest": { 
      "name": "Black Forest", 
      "path": "recipes/cake/chocolate/black-forest.html" 
     }, 
     "new-shortcake": { 
      "milk-chocolate-shortcake": { 
       "name": "Milk chocolate shortcake", 
       "path": "recipes/cake/chocolate/shortcake/milk-chocolate-shortcake.html" 
      }, 
      "dark-chocolate-shortcake": { 
       "name": "Dark chocolate shortcake", 
       "path": "recipes/cake/chocolate/shortcake/dark-chocolate-shortcake.html" 
      } 
     } 
     } 
    }, 
    "pasta": { 
     "spaghetti": { 
     "aglio-olio": { 
      "name": "Spagehetti Aglio Olio", 
      "path": "recipes/pasta/spaghetti/aglio-olio.html" 
     }, 
     "carbonara": { 
      "name": "Carbonara", 
      "path": "recipes/pasta/spaghetti/carbonara.html" 
     } 
     }, 
     "lasagna": { 
     "name": "Lasagna", 
     "path": "recipes/pasta/lasagna.html" 
     } 
    } 
} 



var data2 = [ 
    { 
     "name": "cake", 
     "children": [ 
     { 
      "name": "chocolate", 
      "children": [ 
       { 
        "name": "Black Forest", 
        "path": "recipes/cake/chocolate/black-forest.html" 
       }, 
       { 
        "name": "New Shortcake", 
        "children": [ 
        { 
         "name": "Milk chocolate shortcake", 
         "path": "recipes/cake/chocolate/shortcake/milk-chocolate-shortcake. html" 
        }, 
        { 
         "name": "Dark chocolate shortcake", 
         "path": "recipes/cake/chocolate/shortcake/dark-chocolate-shortcake. html" 
        } 
        ] 
       } 
      ] 
     } 
     ] 
    }, 
    { 
     "name": "pasta", 
     "children": [ 
     { 
      "name": "spaghetti", 
      "children": [ 
       { 
        "name": "Spagehetti Aglio Olio", 
        "path": "recipes/pasta/spaghetti/aglio-olio.html" 
       }, 
       { 
        "name": "Carbonara", 
        "path": "recipes/pasta/spaghetti/carbonara.html" 
       } 
      ] 
     }, 
     { 
      "name": "Lasagna", 
      "path": "recipes/pasta/lasagna.html" 
     } 
     ] 
    } 
] 

https://codepen.io/kyooriouskoala/pen/LLLXmG

Jede Hilfe sehr geschätzt!

PS: Ziel ist es, ein Menü mit der neuen Datenstruktur zu erstellen.

+0

Bitte schreiben Sie Ihren Code direkt in Ihre Frage. – samanime

+0

@samanime Ich kann den gesamten Code nicht direkt in der Frage posten, da er immer wieder sagt: "Es sieht so aus, als ob dein Beitrag hauptsächlich aus Code besteht. Bitte füge weitere Details hinzu." – kyooriouskoala

+0

Können Sie eine zusammengefasste Version von dem geben, was Sie von und in konvertieren möchten? – samanime

Antwort

0

Ich hoffe, dass diese Ausgabe, was Sie meinten.

var final = []; 
function tree(object, temp){ 
for(var key in object){ 

var folder = {}; 
if(object[key] !== null && typeof object[key] == 'object'){ 
    //console.log(key); 

    if(_.has(object[key], "path")){ 
    folder.name = object[key].name; 
    folder.path = object[key].path; 
    folder.children = []; 
    } else{ 
    folder.name = key; 
    folder.children = object[key]; 
    } 

    final.push(folder); 
    tree(object[key]); 
} 
} 

    return final; 
} 

Dies gibt Ihre Daten als assoziatives Objekt mit den benötigten Werten aus.

+0

Danke. Dies gibt das Ergebnis jedoch nicht wie erwartet aus. – kyooriouskoala

Verwandte Themen