我目前有这个:
$.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
您可以创建一个递归循环函数,但是会遇到一个问题:当属性是对象时,因为没有字符串,所以没有文本可显示。因此,您将得到:
- - value11 - value12 - value2 - value3
因为while value2是为项目#2显示的字符串,所以它是为项目#1显示的对象。
value2
无论如何,这就是我组成的: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'); });