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

$.getJSON为您解析 JSON。要获取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

你想遍历 json.GUINESS 属性,它是一个数组,而不是 json,它是一个被 .getJSON 方法解析后的对象:

$.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 回答