Or *_*ger 5 javascript jquery 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');
});
Run Code Online (Sandbox Code Playgroud)
test.json看起来像这样:
{"key1":{"key11":"value11","key12":"value12"},"key2":"value2","key3":"value3"}
我越来越:
[object Object]
value2
value3
Run Code Online (Sandbox Code Playgroud)
如何更改它,以便它遍历所有嵌套项目,无论我有多少嵌套值?
所以对于上面的例子我会得到
value1
value11
value12
value2
value3
Run Code Online (Sandbox Code Playgroud)
你可以创建一个递归循环函数,但是你有一个问题:当一个属性是一个对象时,没有要显示的文本,因为没有字符串.所以,你最终会得到:
- - value11
- value12
- value2
- value3
Run Code Online (Sandbox Code Playgroud)
因为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');
});
Run Code Online (Sandbox Code Playgroud)