Ich möchte eine Baumansicht meiner JSON-Daten generieren. Daher wäre es schön, die zu analysieren JSON-Daten in ein mehrstufige (!) ungeordnete HTML-Liste. Ich habe ein paar Plugins gefunden, aber ich kann sie nicht dazu bringen, mit meinen JSON-Daten zu arbeiten.
Eine nette Lösung wäre ein Aufruf einer Funktion und die Übergabe der JSON-Daten als Parameter. Das Ergebnis könnte eine mehrstufige ungeordnete Liste sein. Ich gehe davon aus, dass die Funktion alle JSON-Daten durchlaufen und schreiben muss ul und li Stichworte.
Das Problem ist die Struktur der JSON-Daten, die nicht zu jsTree kompatibel ist. Aber ich kann die Struktur der JSON-Daten nicht ändern.
– manuel
14. Juli ’11 um 12:36
Karolis
Nur ein kurzes einfaches Beispiel:
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));
Das ist ein schöner Ausgangspunkt, danke! Gerade lese ich die JSON-Daten über $.getJSON ein und übergebe sie dann an die Baumfunktion.
– manuel
14. Juli ’11 um 13:48
ich habe ein Problem mit deinem Code :(. document.write zerstört das HTML-Dokument und erstellt nur die Liste. Kann es mit jQuery nicht zum Laufen bringen anhängen. Könnten Sie mir bitte helfen?
– manuel
15. Juli ’11 um 8:45
Hier ist eine komplette reine Javascript-Lösung. Rekursives Durchlaufen des JSON-Objekts und Erstellen von ul und li’s, während Sie fortfahren. Es ist jedoch besser, dem DOM keine Elemente nacheinander hinzuzufügen.
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);
}
}
}
Haben Sie schon versucht, einen Blick zu werfen jstree.com ?
– ziu
14. Juli ’11 um 11:43
Können Sie ein Beispiel für Ihre JSON-Daten geben?
– Karolis
14. Juli ’11 um 11:46
Das ist eines der Plugins, die ich bereits ausprobiert habe. Aber danke :).
– manuel
14. Juli ’11 um 12:18
Es sieht aus wie das: pastebin.com/jZ3rgkWk
– manuel
14. Juli ’11 um 12:25
Das Problem ist die Struktur der JSON-Daten, die nicht zu jsTree kompatibel ist. Aber ich kann die Struktur der JSON-Daten nicht ändern.
– manuel
14. Juli ’11 um 12:36