一尘不染

jQuery JSON遍历嵌套对象

json

我目前有这个:

    $.getJSON('test.json', function(data) {
      var items = [];

      $.each(data, function(key, val) {
        items.push('<li id="' + key + '">' + val + '</li>');
      });

      $('<ul/>', {
        'class': 'my-new-list',
        html: items.join('')
      }).appendTo('body');
    });

test.json看起来像这样:

{"key1":{"key11":"value11","key12":"value12"},"key2":"value2","key3":"value3"}

我越来越:

[object Object]
value2
value3

如何更改它,以便无论我拥有多少嵌套值,它都将循环遍历所有嵌套项目?

所以对于上面的例子,我会得到

value1
    value11
    value12
value2
value3

阅读 438

收藏
2020-07-27

共1个答案

一尘不染

您可以创建一个递归循环函数,但是会遇到一个问题:当属性是对象时,因为没有字符串,所以没有文本可显示。因此,您将得到:

- - value11
  - value12
- value2
- value3

因为while value2是为项目#2显示的字符串,所以它是为项目#1显示的对象。

无论如何,这就是我组成的:http :
//jsfiddle.net/uXww2/。

// obj is the object to loop, ul is the ul to append lis to
function loop(obj, ul) {
    $.each(obj, function(key, val) {
        if(val && typeof val === "object") { // object, call recursively
            var ul2 = $("<ul>").appendTo(
                $("<li>").appendTo(ul)
            );

            loop(val, ul2);
        } else {
            $("<li>", {
                id: key
            }).text(val).appendTo(ul);
        }
    });
}

$.getJSON('test.json', function(data) {
  var ul = $("<ul>");

  loop(data, ul);

  ul.addClass("my-new-list").appendTo('body');
});
2020-07-27