0

私はphpから取得しているJSON配列を持っています:

"{\"GUINNESS\":[\"Food\",\"Gifting\",\"Merchandise\"]}"

Jqueryで私が持っている-

$.getJSON("menu_processing.php",function(json) {
  $.each(json,function(index,val) {
 $("ul.navlist").append('<li id="'+index+'" class="list">'+val+'</li>');    
    });  

});

ギネスを最上位として取得し、ネストされた配列をサブレベルとして処理したい -

私は次のようなことを考えていました:

$.each(json,function(index,val) {
    // print the top level 
    $.each(json,function(key,val) {
        // print the sub level
});});

しかし、jqueryでこれについてどうすればよいかまだわかりません。ヘルプやポインタは大歓迎です。ここで何かを検索しようとしましたが、これについてどうすればよいかについての手がかりさえありません。私はjqueryで正しい軌道に乗っていますか?

4

4 に答える 4

3

$.getJSONJSON を解析します。オブジェクトのプロパティ (配列) を取得するには、通常のドット表記GUINNESSを使用できます。

$.getJSON("menu_processing.php",function(json) {
    var ul = $("ul.navlist");
    $.each(json.GUINNESS, function(i, val) {
//             ^^^^^^^^^
        ul.append('<li class="list">'+val+'</li>');    
    });
});

最上位オブジェクト ( など) のプロパティ名がわからない場合は、"GUINESS"正しいと推測したように double each (またははるかに単純な for ループ) を使用できます。

$.getJSON("menu_processing.php",function(json) {
    var ul = $("ul.navlist");
    $.each(json, function(name, val) {
        // name === "GUINNESS"
        // val is the array
        $.each(val, function(name, subval) {
            ul.append('<li class="list">'+subval+'</li>');    
    });
});

通常のループ構文と同じ:

// …
    for (var name in json) {
        var val = json[name];
        for (var i=0; i<val.length; i++) {
            var subval = val[i];
            // do something
        }
    }
// …
于 2012-08-27T19:32:58.663 に答える
1

.getJSON メソッドによって解析された後のオブジェクトである json ではなく、配列である json.GUINESS プロパティを反復処理します。

$.each(json.GUINESS, function (index, val) {
    $('ul.navlist').append('<li id="' + index + '" class="list">' + val + '</li>');
});
于 2012-08-27T19:34:31.093 に答える
0

JSON 変数をGUINNESS値として再割り当てするだけです。

$.getJSON("menu_processing.php",function(json) {
    json = json.GUINNESS
    $.each(json,function(index,val) {
        $("ul.navlist").append('<li id="'+index+'" class="list">'+val+'</li>');    
    });  
});
于 2012-08-27T19:33:29.887 に答える
0

次のようなことを試してください:

$.each(json, function() {
    // You access the values using this.somearraykey
    if(isArray(this.somearraykey)){ // If you need to check if it is a multidimentional array
        $items = [];

        // More iterating
        $.each(this.somevalue, function(){
            // Push the values into some structure
            $items.push('<li id="' + this.whatever + '">' + this.somevalue + ' ' + this.someothervalue'</li>');
        });

        $joined = '<ul>' + $items.join('') + '</ul>';
    } else{
        $joined  = '';
    }

    $newitem = [];
    $newitem.push('<li>' + this.someotherarraykey + $joined + '</li>'); // push, push.. 
    $('#placeholderOrWhatever').html('<ul>' + $newitem.join('') + '</ul>');
});

あなたが注目すべきことは(少なくとも私が来た限り.push)、(配列のプッシュ)と.join

編集:もちろん、それを機能させるにはこの機能が必要です:

function isArray(what) {
    return Object.prototype.toString.call(what) === '[object Array]';
}
于 2012-08-27T19:49:34.633 に答える