Search code examples
javascriptjsonparsingloopstitanium

parsing a json in loop where element names change


I'm parsing a JSON response which isn't set up the best, in my opinion. Here is the actual response:

[
    {"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"}
]

and here was my attempt at parsing it:

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;
}

My problem is with obtaining what I have set up as voteSongIds, as the name changes within every iteration of the loop. What I have tried above is causing a run time error. If I comment the line with votesongids, everything works. How should I parse the parse JSON?! Any help appreciated :) I'm using titanium, but for these purposes, it's just javascript!


Solution

  • Is this the result you looking for?

    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);