2013-10-01 44 views
0

我正在解析未設置最佳的JSON響應,在我看來。下面是實際的響應:解析元素名稱更改的循環中的json

[ 
    {"challenge_id":"39029"}, 
    {"song1_id":"198","name":"PRAY","url":"https:\/\/s3-eu-west-1.amazonaws.com\/test\/TAKE_THAT_-_PRAY.mp3"}, 
    {"song2_id":"251","name":"THE TEARS OF A CLOWN","url":"https:\/\/s3-eu-west-1.amazonaws.com\/test\/SMOKEY_ROBINSON_-_THE_TEARS_OF_A_CLOWN.mp3"}, 
    {"song3_id":"11","name":"WONDERFUL TONIGHT","url":"https:\/\/s3-eu-west-1.amazonaws.com\/test\/ERIC_CLAPTON_-_WONDERFUL_TONIGHT.mp3"}, 
    {"song4_id":"288","name":"THE NAME OF THE GAME","url":"https:\/\/s3-eu-west-1.amazonaws.com\/test\/ABBA_-_THE_NAME_OF_THE_GAME.mp3"}, 
    {"song5_id":"159","name":"I'M EVERY WOMAN","url":"https:\/\/s3-eu-west-1.amazonaws.com\/test\/CHAKA_KHAN_-_I'M_EVERY_WOMAN.mp3"}, 
    {"status":"ok"} 
] 

這裏是我試圖在分析它:

var challenge_Songs = JSON.parse(this.responseText); 

for(var i = 1; i<challenge_Songs.length-1; i++){ 
    challengeSongs[i-1] = challenge_Songs[i].url; 
    challengeTitles[i-1] = challenge_Songs[i].name; 
    voteSongIds[i-1]= challenge_Songs.song[i]_id; 
} 

我的問題是獲得我所立爲voteSongIds,爲每一次迭代中的名稱更改循環。我上面嘗試過的是導致運行時錯誤。如果我使用votongssid來評論這一行,那麼一切正常。我應該如何解析JSON解析?任何幫助讚賞:)我使用鈦,但爲了這些目的,它只是JavaScript!

+1

數組持有多種類型和ID領域的所有鍵和相應的值不具有一致的名稱,有趣。我會試着看看是否有機會接受理智的輸出,而不是試圖與這種憎惡作鬥爭。 – Stijn

+0

我不知道人,不知道這是否會工作,但試試這個voteSongIds.push(challenge_Songs [i] ['歌曲'+ i +'_ id']) – manraj82

回答

2

這是你要找的結果嗎?

var challenge_Songs = [ 
{"challenge_id":"39029"}, 
{"song1_id":"198","name":"PRAY","url":"https:\/\/s3-eu-west-1.amazonaws.com\/test\/TAKE_THAT_-_PRAY.mp3"}, 
{"song2_id":"251","name":"THE TEARS OF A CLOWN","url":"https:\/\/s3-eu-west-1.amazonaws.com\/test\/SMOKEY_ROBINSON_-_THE_TEARS_OF_A_CLOWN.mp3"},{"song3_id":"11","name":"WONDERFUL TONIGHT","url":"https:\/\/s3-eu-west-1.amazonaws.com\/test\/ERIC_CLAPTON_-_WONDERFUL_TONIGHT.mp3"}, 
{"song4_id":"288","name":"THE NAME OF THE GAME","url":"https:\/\/s3-eu-west-1.amazonaws.com\/test\/ABBA_-_THE_NAME_OF_THE_GAME.mp3"}, 
{"song5_id":"159","name":"I'M EVERY WOMAN","url":"https:\/\/s3-eu-west-1.amazonaws.com\/test\/CHAKA_KHAN_-_I'M_EVERY_WOMAN.mp3"},{"status":"ok"}] 

var challengeTitles=[], 
    challengeSongs = [], 
    voteSongIds=[]; 

for(var i = 1; i < challenge_Songs.length-1; i++){ 
    challengeTitles.push(challenge_Songs[i]['name']); 
    challengeSongs.push(challenge_Songs[i]['url']); 
    voteSongIds.push(challenge_Songs[i]['song'+ i +'_id']) 
} 

console.log(challengeTitles); 
console.log(challengeSongs); 
console.log(voteSongIds); 
+0

謝謝,它已經排序了! – user2363025

+0

嗨我有另一個類似的問題,你可以幫助我,如果你有時間,我會非常感激。我在這裏創建了一個問題:http://stackoverflow.com/questions/19366024/sending-a-tricky-array-in-a-httpclient – user2363025

0

請嘗試以下代碼。這將工作完美的任何鍵或值爲

for(var i = 0; i<challenge_Songs.length; i++){ 
    for(key in challenge_Songs[i]){ 
    console.log("\n key=>" + key + " : value=> " + challenge_Songs[i][key]); 
    } 
    console.log("\n"); 
} 

它會顯示你更簡單的方式