2012-10-01 105 views
3

我需要搜索JSON數據並找到包含「kind」「播放列表」的每個對象,然後遍歷軌道並提取將放入hmtl列表中的信息。問題在於,在某些情況下(取決於URL的類型)而不是包含所有對象的多維數組,json信息只是一個單一對象。jQuery - 通過JSON數組搜索

下面是兩種url類型。

這是一個包含一個級別的信息的播放列表。 http://api.soundcloud.com/playlists/1980151.json?client_id=bcc776e7aa65dbc29c40ff21a1a94ecd

這是一個只包含多個播放列表作爲對象的數組。 http://api.soundcloud.com/users/dubstep/playlists.json?client_id=bcc776e7aa65dbc29c40ff21a1a94ecd

當前代碼我是這樣的:

$.getJSON('http://api.soundcloud.com/users/dubstep/playlists.json?client_id=bcc776e7aa65dbc29c40ff21a1a94ecd', { get_param: 'value' }, function(url_data) { 
$.each(url_data, function (i, elem) { 
    if (elem.kind === 'playlist') { 
     $.each(elem.tracks, function (i, elem) { 
      console.log(elem.title); 
     }); 
    } 
}); 

});

只有適用於處理有多個播放列表的「用戶」URL。

總結我的問題是,我需要一種方法來搜索數組的所有級別,以尋找具有===播放列表的級別。

回答

12

這應該做你要找的東西。

$.each(json, function (i, elem) { 
    if (elem.kind === 'playlist') { 
     $.each(elem.tracks, function (i, elem) { 
      console.log(elem.title); 
     }); 
    } 
}); 

UPDATE:

這將任一網址工作。此外,這裏的更多更先進的客戶端輸出一個小提琴:http://jsfiddle.net/jTLvE/

var parse = function (json) { 
    $.each(json, function (i, elem) { 
     if (elem.kind === 'playlist') { 
      $.each(elem.tracks, function (i, elem) { 
       console.log(elem.title); 
      }); 
     } 
    }); 
}, 
parseReturnedData = function (json) { 
    var isObject = (typeof json === 'object' && json instanceof Object), 
     isArray = (typeof json === 'object' && json instanceof Array), 
     newArray = []; 
    if (isArray) { 
     parse(json); 
    } else if (isObject) { 
     newArray.push(json); 
     parse(newArray); 
    } 
}; 
+0

當我擁有多個播放列表時,此功能完美無缺!但是,如果我使用http://api.soundcloud.com/playlists/1980151.json?client_id=bcc776e7aa65dbc29c40ff21a1a94ecd它不會工作,因爲「TypeError:'null'不是一個對象(評估'elem.kind')」 –

+0

哇,這超出了呼叫的範圍!太棒了。乾杯! –

0

你試過json path?我用它,它小而快,特別是搜索json樹(搜索和寫作我會使用flock雖然)。

+0

我寧願沒有這個代碼依賴任何插件或要求除了jQuery的,因爲我想用它作爲獨立插件。 –

+0

我的確瞭解你的顧慮;如果你需要做json查找,我認爲這是值得檢查這些庫,但當然對於單個案例它可能是一個矯枉過正。 – Szabi

-1

試試這個代碼:

var objJson = jQuery.parseJSON(json); 
jQuery.each(objJson , function(i, val) { 
     alert(val); 
    });