3

我需要搜索 JSON 数据并找到包含“种类”“播放列表”的每个对象,然后浏览曲目并提取将放入 hmtl 列表的信息。问题是在某些情况下(取决于 URL 的类型)而不是包含所有对象的多维数组,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);
        });
    }
});

});

在处理有多个播放列表的“用户”网址时才有效。

总结一下我的问题,我需要一种方法来搜索数组的所有级别,以查找类型 === 播放列表的级别。

4

3 回答 3

12

这应该可以满足您的需求。

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

更新:

这将适用于任一 URL。此外,这里有一个更高级的客户端输出的小提琴: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);
    }
};
于 2012-10-01T11:36:01.087 回答
0

你试过json路径吗?我用过它,它又小又快,尤其是用于搜索 json 树(虽然我会使用flock来搜索和编写)。

于 2012-10-01T11:15:11.983 回答
-1

试试这个代码:

var objJson = jQuery.parseJSON(json);
jQuery.each(objJson , function(i, val) {
      alert(val);
    });
于 2012-10-01T11:19:58.327 回答