I am looking for a way to render a JSON tree using nested <div>
as mentioned in the title. Here is a sample of the data (there is a max of 8 levels in the tree):
{
"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
}
I can get/parse the JSON tree and save it to a variable. Now I need to traverse the tree recursively and either:
div
node and add to a new tree.But how?
You could do this in raw JS with little to no difficulty:
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;
}
Just call that function with your object, and it will return the HTML as a set of nested lists - you can of course change it to use just <div>
s if you prefer.
EDIT: And here's a version that uses DOM elements and returns a node that can be inserted with appendChild
or similar:
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;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With