Mögliches Duplizieren:
Hübscher JSON-Druck mit JavaScript
Ich möchte meine rohen JSON-Daten genauso wie JSONview auf einer HTML-Seite anzeigen. Meine Rohdaten sind beispielsweise:
{
"hey":"guy",
"anumber":243,
"anobject":{
"whoa":"nuts",
"anarray":[
1,
2,
"thr<h1>ee"
],
"more":"stuff"
},
"awesome":true,
"bogus":false,
"meaning":null,
"japanese":"明日がある。",
"link":"http://jsonview.com",
"notLink":"http://jsonview.com is great"
}
Es kommt von http://jsonview.com/ und was ich erreichen möchte, ist http://jsonview.com/example.json , wenn Sie Chrome verwenden und installiert haben das JSONView-Plugin.
Ich habe es versucht, aber nicht verstanden, wie es funktioniert. Ich möchte ein JS-Skript (CSS zum Hervorheben) verwenden, um meine rohen JSON-Daten, die von ajax abgerufen werden, benutzerdefiniert zu formatieren und schließlich auf einer HTML-Seite an einer beliebigen Stelle wie in einem div-Element abzulegen. Gibt es bereits vorhandene JS-Bibliotheken, die dies erreichen können? Oder wie geht das?
Ich denke, alles, was Sie brauchen, um die Daten auf einer HTML-Seite anzuzeigen, ist JSON.stringify
.
Wenn Ihr JSON beispielsweise so gespeichert ist:
var jsonVar = {
text: "example",
number: 1
};
Dann müssen Sie dies nur tun, um es in einen String zu konvertieren:
var jsonStr = JSON.stringify(jsonVar);
Und dann können Sie direkt in Ihren HTML-Code einfügen, zum Beispiel:
document.body.innerHTML = jsonStr;
Natürlich möchten Sie body
wahrscheinlich durch getElementById
durch ein anderes Element ersetzen.
Was den CSS-Teil Ihrer Frage angeht, können Sie RegExp verwenden, um das stringifizierte Objekt zu bearbeiten, bevor Sie es in das DOM einfügen. Beispielsweise sollte dieser Code ( auch zu Demonstrationszwecken auf JSFiddle ) für das Einrücken von geschweiften Klammern sorgen.
var jsonVar = {
text: "example",
number: 1,
obj: {
"more text": "another example"
},
obj2: {
"yet more text": "yet another example"
}
}, // THE RAW OBJECT
jsonStr = JSON.stringify(jsonVar), // THE OBJECT STRINGIFIED
regeStr = '', // A EMPTY STRING TO EVENTUALLY HOLD THE FORMATTED STRINGIFIED OBJECT
f = {
brace: 0
}; // AN OBJECT FOR TRACKING INCREMENTS/DECREMENTS,
// IN PARTICULAR CURLY BRACES (OTHER PROPERTIES COULD BE ADDED)
regeStr = jsonStr.replace(/({|}[,]*|[^{}:]+:[^{}:,]*[,{]*)/g, function (m, p1) {
var rtnFn = function() {
return '<div style="text-indent: ' + (f['brace'] * 20) + 'px;">' + p1 + '</div>';
},
rtnStr = 0;
if (p1.lastIndexOf('{') === (p1.length - 1)) {
rtnStr = rtnFn();
f['brace'] += 1;
} else if (p1.indexOf('}') === 0) {
f['brace'] -= 1;
rtnStr = rtnFn();
} else {
rtnStr = rtnFn();
}
return rtnStr;
});
document.body.innerHTML += regeStr; // appends the result to the body of the HTML document
Dieser Code sucht einfach nach Abschnitten des Objekts in der Zeichenfolge und teilt sie in divs auf (obwohl Sie den HTML-Teil davon ändern könnten). Jedes Mal, wenn es auf eine geschweifte Klammer trifft, wird der Einzug jedoch inkrementiert oder verkleinert, je nachdem, ob es sich um eine öffnende Klammer oder um ein Schließen handelt (Verhalten ähnlich wie das space - Argument von 'JSON.stringify' ) . Sie können dies jedoch als Grundlage für verschiedene Arten der Formatierung verwenden.
Beachten Sie, dass der von Ihnen bereitgestellte Link keine HTML-Seite ist, sondern ein JSON-Dokument. Die Formatierung erfolgt durch den Browser.
Sie müssen entscheiden, ob:
Wenn Sie 1. Ihrer Anwendung einen Antwort-Body mit JSON rendern möchten, legen Sie den MIME-Typ (application/json) fest usw. In diesem Fall erfolgt die Formatierung durch den Browser (und/oder die Browser-Plugins) )
Wenn dies der Fall ist, müssen Sie eine einfache minimale HTML-Seite mit JSON rendern, auf der Sie sie auf verschiedene Weise hervorheben können:
Wenn Sie weitere Details zu Ihrem Stack angeben, ist es einfacher, Beispiele oder Ressourcen bereitzustellen.
BEARBEITEN: Für die JS-Hervorhebung auf Clientseite können Sie beispielsweise higlight.js versuchen.
JSON in einem beliebigen HTML-Tag mit Ausnahme des <script>
-Tags wäre lediglich Text. Es ist also so, als würden Sie Ihrer HTML-Seite eine Story hinzufügen.
Bei der Formatierung ist das jedoch eine andere Sache. Ich denke, Sie sollten den Titel Ihrer Frage ändern.