3431 Stimmen

JSON mit JavaScript hübsch ausdrucken

Wie kann ich JSON in einem leicht zu lesenden Format (für menschliche Leser) anzeigen? Ich bin in erster Linie für Einrückung und Leerraum, mit vielleicht sogar Farben / Schriftarten / etc.

26 Stimmen

Wenn Sie nur nach HTML ausgeben, können Sie es in eine <pre> Tag.

0 Stimmen

Alle Antworten funktionieren, aber Sie müssen Javascript verwenden :: var str = JSON.stringify(obj, null, 2); in html // <pre id="output_result_div"></pre >

0 Stimmen

Verwenden. Monaco-Editor um Ihr json anzuzeigen, ist im Jahr 2023 die bessere Wahl.

6754voto

user123444555621 Punkte 139356

Pretty-Printing ist nativ implementiert in JSON.stringify() . Das dritte Argument aktiviert den Schöndruck und legt die zu verwendenden Abstände fest:

var str = JSON.stringify(obj, null, 2); // spacing level = 2

Wenn Sie eine Syntaxhervorhebung benötigen, können Sie eine Regex-Magie wie diese verwenden:

function syntaxHighlight(json) {
    if (typeof json != 'string') {
         json = JSON.stringify(json, undefined, 2);
    }
    json = json.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
    return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) {
        var cls = 'number';
        if (/^"/.test(match)) {
            if (/:$/.test(match)) {
                cls = 'key';
            } else {
                cls = 'string';
            }
        } else if (/true|false/.test(match)) {
            cls = 'boolean';
        } else if (/null/.test(match)) {
            cls = 'null';
        }
        return '<span class="' + cls + '">' + match + '</span>';
    });
}

Sehen Sie hier in Aktion: jsfiddle

Oder einen vollständigen Ausschnitt unten:

function output(inp) {
    document.body.appendChild(document.createElement('pre')).innerHTML = inp;
}

function syntaxHighlight(json) {
    json = json.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
    return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) {
        var cls = 'number';
        if (/^"/.test(match)) {
            if (/:$/.test(match)) {
                cls = 'key';
            } else {
                cls = 'string';
            }
        } else if (/true|false/.test(match)) {
            cls = 'boolean';
        } else if (/null/.test(match)) {
            cls = 'null';
        }
        return '<span class="' + cls + '">' + match + '</span>';
    });
}

var obj = {a:1, 'b':'foo', c:[false,'false',null, 'null', {d:{e:1.3e5,f:'1.3e5'}}]};
var str = JSON.stringify(obj, undefined, 4);

output(str);
output(syntaxHighlight(str));

pre {outline: 1px solid #ccc; padding: 5px; margin: 5px; }
.string { color: green; }
.number { color: darkorange; }
.boolean { color: blue; }
.null { color: magenta; }
.key { color: red; }

33 Stimmen

Supergeil. Ich habe eine Funktion hinzugefügt, um dies in einem neuen Fenster zum Debuggen zu öffnen: var json = syntaxHighlight(JSON.stringify(obj,undefined,4);); var w = window.open(); var html = "<head><style>pre {outline: 1px solid #ccc; padding: 5px; margin: 5px; } .string { color: green; } "; html+= " .number { color: darkorange; } .boolean { color: blue; } .null { color: magenta; } .key { color: red; }</style></head><body>"; html+= "<pre>"+json+"</pre>"; w.document.writeln(html);

48 Stimmen

Sehr schön. Vergessen Sie nicht, dass es css und eine <pre> Allerdings.

113 Stimmen

Beachten Sie, dass stringify(...) arbeitet mit JSON Objekte nicht auf JSON-Strings. Wenn Sie eine Zeichenkette haben, müssen Sie JSON.parse(...) erste

425voto

Rick Hanlon II Punkte 18593

Die Antwort von Benutzer Pumbaa80 ist gut, wenn Sie eine Objekt die Sie hübsch gedruckt haben wollen. Wenn Sie von einem gültigen JSON String die Sie hübsch gedruckt haben möchten, müssen Sie sie zunächst in ein Objekt umwandeln:

var jsonString = '{"some":"json"}';
var jsonPretty = JSON.stringify(JSON.parse(jsonString),null,2);  

Dabei wird aus der Zeichenkette ein JSON-Objekt erstellt, das dann mit Hilfe von JSON stringify's pretty print wieder in eine Zeichenkette umgewandelt wird.

52 Stimmen

Beachten Sie, dass Sie die Zeichenkette bei der Anzeige in <pre></pre> Tags.

0 Stimmen

Es scheint nur zu funktionieren, wenn Sie Textarea verwenden, ansonsten werden die Zeilenumbrüche nicht eingefügt.

127voto

Charmie Punkte 2127

Ein besserer Weg.

JSON-Array in Javascript aufhübschen

JSON.stringify(jsonobj,null,'\t')

68voto

John Slegers Punkte 41127

Ich glaube, Sie suchen so etwas wie das hier:

JSON.stringify(obj, null, '\t');

Damit wird Ihre JSON-Zeichenkette "hübsch" ausgedruckt, wobei ein Tabulator für die Einrückung verwendet wird.

Wenn Sie es vorziehen, Leerzeichen anstelle von Tabulatoren zu verwenden, können Sie auch eine Zahl für die Anzahl der gewünschten Leerzeichen verwenden:

JSON.stringify(obj, null, 2);

65voto

Adel MANI Punkte 789
var jsonObj = {"streetLabel": "Avenue Anatole France", "city": "Paris 07",  "postalCode": "75007", "countryCode": "FRA",  "countryLabel": "France" };

document.getElementById("result-before").innerHTML = JSON.stringify(jsonObj);

Im Falle der Anzeige in HTML, sollten Sie eine Balise hinzufügen <pre></pre>

document.getElementById("result-after").innerHTML = "<pre>"+JSON.stringify(jsonObj,undefined, 2) +"</pre>"

Ejemplo:

var jsonObj = {"streetLabel": "Avenue Anatole France", "city": "Paris 07",  "postalCode": "75007", "countryCode": "FRA",  "countryLabel": "France" };

document.getElementById("result-before").innerHTML = JSON.stringify(jsonObj);

document.getElementById("result-after").innerHTML = "<pre>"+JSON.stringify(jsonObj,undefined, 2) +"</pre>"

div { float:left; clear:both; margin: 1em 0; }

<div id="result-before"></div>
<div id="result-after"></div>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X