2012-10-01 77 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); 
    });