簡體   English   中英

遍歷JSON對象

[英]Iterating through JSON object

由於我對JSON和jQuery相當陌生,因此我努力遍歷一個我可以使用以下代碼加載的對象:

$.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”了,但是我今天早上一直在尋找的其他答案並沒有給我帶來更多的清晰度。

嘗試使用此:

$.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/

沒有理由為此使用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);
        }
    }
}

輸出:

newsitem 1的標題
newsitem 2的標題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM