Generate unordered list from JSON Data?
I'd like to generate a tree view of my JSON data. Therefore it would be nice to parse 开发者_JAVA技巧the JSON data into a multi-level (!) unordered HTML list. I found a few plugins but I can't get them to work with my JSON data.
Nice solution would be a call to a function and hand over the json data as parameter. The result could be a multi-level unordered list. I assume that the function has to loop through all the JSON data and write ul and li tags.
Is there a straight forward way to do that?
tia!
PS: Example trees (that work with my JSOn data): http://braincast.nl/samples/jsoneditor/ http://www.thomasfrank.se/downloadableJS/JSONeditor_example.html
Just a quick simple example:
function tree(data) {
if (typeof(data) == 'object') {
document.write('<ul>');
for (var i in data) {
document.write('<li>' + i);
tree(data[i]);
}
document.write('</ul>');
} else {
document.write(' => ' + data);
}
}
jQuery version:
function tree(data) {
if (typeof(data) == 'object') {
var ul = $('<ul>');
for (var i in data) {
ul.append($('<li>').text(i).append(tree(data[i])));
}
return ul;
} else {
var textNode = document.createTextNode(' => ' + data);
return textNode;
}
}
$(document.body).append(tree(data));
Here is a complete pure javascript solution. Recursive traverse the JSON object and construct you ul and li's as you go. It's better for not to add elements to the DOM one at a time, though.
HTML
<ul id="JSONunorderedList"></ul>
JAVASCRIPT
var jsonObj ={"labels":[ {"labelFont":"35pt Calibri","labelLocation":{"x":0.1483, "y":0.75}, "labelText":"fluffer"},{"labelFont":"35pt Calibri","labelLocation":{"x":0.666, "y":0.666}, "labelText":"nutter"}]}; //some json to display
var listEl =document.getElementById('JSONunorderedList');
makeList(jsonObj,listEl);
function makeList( jsonObject, listElement){
for(var i in jsonObject){//iterate through the array or object
//insert the next child into the list as a <li>
var newLI = document.createElement('li');
if (jsonObject[i] instanceof Array){
newLI.innerHTML=i+": ARRAY";
newLI.className="arrayOrObject"; //add a class tag so we can style differently
}
else if ( jsonObject[i] instanceof Object){
newLI.innerHTML=i+": OBJECT";
newLI.className="arrayOrObject"; //add a class tag so we can style differently
}
else
newLI.innerHTML=i+': '+jsonObject[i];
listElement.appendChild(newLI);
//insert a <ul> for nested nodes
if (jsonObject[i] instanceof Array || jsonObject[i] instanceof Object){
var newUL = document.createElement('ul');
//newUL.innerHTML=i;
listElement.appendChild(newUL);
makeList(jsonObject[i],newUL);
}
}
}
das fiddle http://jsfiddle.net/honkskillet/LvMnG/
Have you tried using PHP and json_decode();
http://php.net/manual/en/function.json-decode.php
This would return your JSON string as an array in PHP and you can then loop through the array to create your UL > LI list.
Just an idea..
精彩评论