2017-06-22 68 views
0

试图将嵌套的JSON数据(data1)重新构建为“正确”格式(data2) 迄今为止没有成功。JavaScript ::通过嵌套的JSON对象迭代并创建新的结构

data1基于给定的父目录(食谱)生成,该目录查找html文件。

data2是我试图用data1输出的内容,因为文件夹内的任何内容都可以更好地表示为对象数组,而不仅仅是纯粹的嵌套对象。

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

任何帮助,非常感谢!

PS:最终目标是建立一个包含新数据结构的菜单。

+0

请将您的代码直接发布到您的问题中。 – samanime

+0

@samanime我不能直接发布整个代码,因为它一直说“看起来你的文章主要是代码;请添加一些更多的细节。” – kyooriouskoala

+0

你可以给你想要转换的概要版本吗? – samanime

回答

0

我希望这个输出是你的意思。

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; 
} 

这会将您的数据作为需要的值输出为关联对象。

+0

谢谢。这不会按预期输出结果。 – kyooriouskoala