我正在寻找一种使用标题中提到的嵌套<div>
呈现JSON树的方法。以下是数据样本(树中最多有8个级别):
{
"children": {
"Bacteria": {
"children":{
"Verrucomicrobia":{
"children":{
"Methylacidiphilae":{
"children":{
"Methylacidiphilales":{
"children":{},
"count":2,
"level":"order",
"name":"Methylacidiphilales",
"score":1.46
}
},
"count":2,
"level":"class",
"name":"Methylacidiphilae",
"score":1.46
}
},
"count":2,
"level":"phylum",
"name":"Verrucomicrobia",
"score":1.46
}
},
"count":2,
"level":"kingdom",
"name":"Bacteria",
"score":1.46
}
},
"count":0,
"level":"root",
"name":"Root",
"score":0.0
}
我可以获取/解析JSON树并将其保存到变量中。现在我需要以递归方式遍历树,并且:
div
节点并添加到新树中。但是怎么样?
答案 0 :(得分:11)
你可以在原始JS中做到这一点,几乎没有困难:
function json2html(json) {
var i, ret = "";
ret += "<ul>";
for( i in json) {
ret += "<li>"+i+": ";
if( typeof json[i] === "object") ret += json2html(json[i]);
else ret += json[i];
ret += "</li>";
}
ret += "</ul>";
return ret;
}
只需使用您的对象调用该函数,它就会将HTML作为一组嵌套列表返回 - 如果您愿意,您当然可以将其更改为仅使用<div>
。
编辑:这是一个使用DOM元素的版本,并返回一个可以插入appendChild
或类似的节点:
function json2html(json) {
var i, ret = document.createElement('ul'), li;
for( i in json) {
li = ret.appendChild(document.createElement('li'));
li.appendChild(document.createTextNode(i+": "));
if( typeof json[i] === "object") li.appendChild(json2html(json[i]));
else li.firstChild.nodeValue += json[i];
}
return ret;
}