2013-10-28 36 views
3

我正在拉我的頭髮。我使用jQuery.getJSON()方法從服務器獲取響應。這是一個示例反應:使用jQuery解析JavaScript中的JSON

{ 
    "playlist": { 
     "track": { 
      "song": "Wake me up", 
      "albumart": "http://example.com/image.png", 
      "videoid": "CDsKBof4iMA" 
     } 
    } 
} 

響應中會有多條曲目,但只有一個播放列表。我正在請求使用以下內容:

$.getJSON("api/playlist/get.php", {artist: "artist+name" }) 

如何解析這些數據?

+0

你需要一個成功的功能添加到您的getJSON CA二。 JSON字符串將解析爲一個對象,然後您可以像訪問任何其他JS對象一樣訪問它的屬性。 getJSON的jquery api有一個例子:http://api.jquery.com/jQuery.getJSON/ – scrappedcola

回答

1

比方說,你的JSON結果是這樣的:

{ 

    "playlist": { 
     "track": { 
      "song": "Wake me up", 
      "albumart": "http://example.com/image.png", 
      "videoid": "CDsKBof4iMA" 
     }, 
     "track": { 
      "song": "Wake me up 2", 
      "albumart": "http://example.com/image2.png", 
      "videoid": "CDsKBof4iMA2" 
     }, 
     "track": { 
      "song": "Wake me up 3", 
      "albumart": "http://example.com/image3.png", 
      "videoid": "CDsKBof4iMA3" 
     } 
    } 
} 

UPDATE:

這JSON是無效的格式,因爲它具有相同的屬性名稱的多個子對象。 如果你有能力,改變從服務器響應爲這種格式:

{ 
    playlist: { 
     tracks: [{ 
      "song": "Wake me up", 
      "albumart": "http://example.com/image.png", 
      "videoid": "CDsKBof4iMA" 
     }, { 
      "song": "Wake me up 2", 
      "albumart": "http://example.com/image2.png", 
      "videoid": "CDsKBof4iMA2" 
     }, { 
      "song": "Wake me up 3", 
      "albumart": "http://example.com/image3.png", 
      "videoid": "CDsKBof4iMA3" 
     }] 
    } 
} 

然後你就可以從通過陣列獲取每個track對象:

你應該用你$.getJSON功能是這樣的:

$.getJSON("api/playlist/get.php", function (data) { 

    for (var key in myObj.playlist.tracks) { 
     //do something with your track object 
     console.log(myObj.playlist.tracks[key].song) 
    } 

}) 

這裏的jsfiddle你:http://jsfiddle.net/zur4ik/Fy6ud/1/

+0

我不斷收到console.log()行上的undefined錯誤 –

+0

@JamesWalker我剛剛更新了我的文章。你得到'undefined',因爲你的JSON響應格式無效。它具有多個具有相同屬性名稱的對象。 如果您能夠從服務器更改JSON發件人文件,請按照建議將其更改爲正確的格式:將對象放入數組中。 – zur4ik

+0

非常感謝!我甚至從來沒有想過JSON響應可能不正確。 –

0

試試這個:

$.getJSON("api/playlist/get.php", function(data) { 
    var responseObject = JSON.parse(data); 
    // do stuff with responseObject 
}); 
0

按照該documentation

jQuery.getJSON(url [, data ] [, success(data, textStatus, jqXHR) ]) 

在這方面,success(data, textStatus, jqXHR)是回調,如果JSON負載成功