2013-04-22 49 views
-1

我遇到了问题,试图在我的JSON文件中获取嵌套数据。在JSON中嵌套的数据

任何人都可以帮助我吗?我正在尝试创建一个megamenu。

$.getJSON("js/nav.json", function (data) { 
    $.each(data.navigation, function (i, navigation) { 
     var jsondata = "<li class='top-level'><a href='/" + this.link + "'>" + this.title + "</a></li>"; 
     $.each(this.headingArray, function() { 
      alert(hello); 
     }); 
     $(jsondata).appendTo("ul.nav"); 
    }); 
    }); 
}); 

,这里是样本JSON文件IM从

{ 
    "navigation": [ 
      { 
        "title": "Home", 
        "link": "" 
}, 
      { 
        "title": "Find your ski holiday", 
        "link": "#URLhere", 
        "headingArray": [ 
          { 
            "heading": [ 
              { 
                "title": "Destinations", 
                "link": "#URLhere", 
                "subheading": [ 
                  { 
                    "title": "Andorra", 
                    "link": "#URLhere" 
}, 
                  { 
                    "title": "Austria", 
                    "link": "#URLhere" 
}, 

任何帮助阅读将不胜感激吗?

演示 - http://dev.thirstythursdays.co.uk/menu-json3

+0

你可以更具体一点*你的问题是什么*? – Friederike 2013-04-22 14:48:26

回答

1

因为你的对象有不同的属性,如headingArraysubheading等,试图通过this.headingArray你要检查它是否定义或不重复了。

所以添加类似

if (this.headingArray){ 
    //iterate through this.headingArray 
} 

DEMO:http://jsfiddle.net/Q2Xy4/1/

+0

感谢您的帮助! – imshuffling 2013-04-22 15:00:19

+0

+1演示提琴。 – 2013-04-22 15:12:11

0

这是你的反应是如何被解析。

请注意,由于您的JSON结构的方式,数组中不是每个生成的元素都包含一个headingArray/subheading字段。

enter image description here

例如,如果你看一下JSON响应数组中的第一个元素,你可以清楚地看到该对象不包含headingArray场:

{ 
    "navigation": [ 
    { 
     "title": "Home", 
     "link": "" // No headingArray in here... 
    }, { 
     "title": "Find your ski holiday", 
     "link": "#URLhere", 
     "headingArray": [ 
     { 

你应该怎么做是:

  • 无论是重组的JSON只包含同质元素,
  • 或重写您的解析逻辑,以在 尝试访问其值时检查不存在的字段。