3

JSON データを検索し、「kind」「playlist」を含むすべてのオブジェクトを見つけてから、トラックを調べて、hmtl リストに入れる情報を引き出す必要があります。問題は、すべてのオブジェクトを含む多次元配列ではなく、場合によっては (URL の種類によって)、json 情報が単なるオブジェクトになることです。

以下に 2 つの URL タイプを示します。

これは、1 レベルの情報のみを含むプレイリストです。 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 を扱う場合にのみ機能します。

私の問題を要約すると、配列のすべてのレベルを検索して、種類が === プレイリストのレベルを見つける方法が必要です。

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 に答える