2013-06-21 127 views
0

迭代由于我是相当新的JSON和jQuery我挣扎过一个对象,我SOFAR能够用下面的代码加载到迭代:通过JSON对象

$.ajax({ 
    url: source, 
    dataType: 'json', 
    success: function(obj) { 
     // Laat een succes-melding zien wanneer de data goed ingeladen is 
     console.log("SUCCESS"); 
    }, 
    error: function(obj) { 
     // Laat een error-melding zien wanneer de data niet goed ingeladen is 
     alert("ERROR"); 
    }, 
    complete: function(obj) { 
     console.log(obj);   
    } 
}); 

不幸的是结构JSON的是我的口味有点复杂,但因为它是一个外部源(通过YQL)没什么,可将其改为:

{ 
    "query": { 
    "count": 1, 
    "created": "2013-06-21T11:42:57Z", 
    "lang": "en-US", 
    "diagnostics": { 
     "publiclyCallable": "true", 
     "url": { 
     "execution-start-time": "1", 
     "execution-stop-time": "1868", 
     "execution-time": "1867", 
     "proxy": "DEFAULT", 
     "content": "contentsource" 
     }, 
     "user-time": "1868", 
     "service-time": "1867", 
     "build-version": "37740" 
    }, 
    "results": { 
     "viewentries": { 
     "toplevelentries": "0", 
     "viewentry": [ 
      { 
      "date": "2013-06-11", 
      "noteid": "A2FA", 
      "position": "1", 
      "siblings": "0", 
      "unid": "15D7F7A15C0DAE", 
      "entrydata": [ 
       { 
       "columnnumber": "0", 
       "name": "Datum_van_instantie", 
       "text": "2013-06-11" 
       }, 
       { 
       "columnnumber": "1", 
       "name": "kopregel", 
       "text": "Title of newsitem 1" 
       }, 
       { 
       "columnnumber": "2", 
       "name": "tussenkopje", 
       "text": "Introduction text of newsitem 1" 
       }, 
       { 
       "columnnumber": "3", 
       "name": "broodtekst", 
       "text": "Content of newsitem 1" 
       }, 
       { 
       "columnnumber": "4", 
       "name": "imagetag", 
       "text": "Image URL of newsitem 1" 
       } 
      ] 
      }, 
      { 
      "date": "2013-05-29", 
      "noteid": "A2F6", 
      "position": "2", 
      "siblings": "0", 
      "unid": "9237CD3822ED8DD", 
      "entrydata": [ 
       { 
       "columnnumber": "0", 
       "name": "Datum_van_instantie", 
       "text": "2013-05-29" 
       }, 
       { 
       "columnnumber": "1", 
       "name": "kopregel", 
       "text": "Title of newsitem 2" 
       }, 
       { 
       "columnnumber": "2", 
       "name": "tussenkopje", 
       "text": "Introduction text of newsitem 2" 
       }, 
       { 
       "columnnumber": "3", 
       "name": "broodtekst", 
       "text": "Content of newsitem 2" 
       }, 
       { 
       "columnnumber": "4", 
       "name": "imagetag", 
       "text": "Image URL of newsitem 2" 
       } 
      ] 
      } 
     ] 
     } 
    } 
    } 
} 

我想完成的事情是打印类似的东西跟随我的HTML文件中的元素:

Title of newsitem 1 
Title of newsitem 2 

我肯定从那时起我很高兴从文件中提取剩余的项目。用我想要的东西对我来说是有道理的,在各种obj.viewentry [0]选项上使用$ .each循环,我得到一个未定义的错误。当我尝试访问更具体的例如

$.each(obj.viewentry, function(index, value) { 
    console.log(this.entrydata[0]);    
}); 

我得到的回报是一个jQuery错误,TypeError:e未定义。虽然我确信最后的代码也是'jQuery for Dummies',但我今天早上搜索的其他答案并没有给我更多的清晰。

回答

0

尝试使用这样的:

$.each(obj.query.results.viewentries.viewentry, function (index, value){ 
    $.each(value.entrydata, function (index, value) { 
     if (value.name == "kopregel") console.log(value.text); 
    }); 
}); 

这是工作:http://jsfiddle.net/8tKYd/2/

0

没有理由使用jQuery这个(除了AJAX部分):

for (var viewEntryKey in obj.query.results.viewentries.viewentry) { 
    for (var i = 0; i < obj.query.results.viewentries.viewentry[viewEntryKey].entrydata.length; i++) { 
     if (obj.query.results.viewentries.viewentry[viewEntryKey].entrydata[i].name == 'kopregel') { 
      console.log(obj.query.results.viewentries.viewentry[viewEntryKey].entrydata[i].text); 
     } 
    } 
} 

输出:

Title of newsitem 1
Title of newsitem 2