Zum Hauptinhalt springen

JSON einrücken

Dieses Tool formatiert JSON mit Einrückungen und Zeilenumbrüchen, sodass ein Mensch es lesen kann. Fügen Sie unten ein Dokument ein, um es hier zu erledigen, oder übernehmen Sie die eine Zeile, die es in Ihrer Sprache tut – JavaScript, Python, Go, Java, C#, PHP, Ruby, Rust, jq oder PowerShell –, jeweils mit der Voreinstellung, in die man gern hineintappt, denn jede dieser APIs hat eine.

Nur lokal
Einzug
JSON
0 B1 ZeileZ. 1, Sp. 1
Formatiertschreibgeschützt
0 B1 Zeile
In Ihrer Sprache

Integriert. Ohne Abhängigkeiten, im Browser und in Node.

JavaScript – lesbar formatierenschreibgeschützt
225 B7 Zeilen
Eine häufig überraschende Standardeinstellung Das zweite Argument ist der Replacer, nicht der Einzug. Verwenden Sie JSON.stringify(value, null, 2). undefined, Funktionen und Symbole können entfallen; BigInt löst einen TypeError aus.

Wie funktioniert JSON einrücken?

JSON pretty-printen bedeutet eines: das Dokument parsen und dann mit einem Zeilenumbruch nach jedem Komma und einer Einrückungsebene pro Verschachtelungsebene wieder ausschreiben. Die Bytes sind äquivalent – ein Parser kann die beiden nicht unterscheiden –, aber das eine ist lesbar und das andere eine Wand.

Zwei verschiedene Fragen, eine Seite

Wer danach sucht, will eines von zwei Dingen. Entweder ein Feld, in das er eine Payload einfügen kann – das ist das Panel oben; oder die Code-Zeile, die es in einem Programm tut, das er gerade schreibt – das ist die Auswahl darunter. Diese Seite beantwortet beides, denn zu einem Formatierungs-Widget geschickt zu werden, wenn man json.dumps(obj, indent=2) brauchte, ist ein verschwendeter Klick.

Jede Sprache hat eine Voreinstellung, die irgendwen überrascht

Das ist der Teil, der sich zu wissen lohnt, und deshalb trägt hier jedes Rezept eine eigene Anmerkung, statt bloß eine Liste aus Einzeilern zu sein. Python escapet jedes Nicht-ASCII-Zeichen, außer Sie übergeben ensure_ascii=False, daher kommt café als caf\u00e9 an. Go escapet <, > und &, weil die Ausgabe einmal in einem <script>-Tag landen könnte. PHP escapet Schrägstriche, sodass jede URL in Ihrer Ausgabe kaputt aussieht. PowerShells ConvertTo-Json schneidet alles ab, was tiefer als zwei Ebenen verschachtelt ist, und warnt Sie nicht – es ersetzt den Rest einfach durch einen Typnamen und macht weiter.

Und in JavaScript liegt der Fehler im Aufruf selbst: JSON.stringify(value, 2) sieht richtig aus, kompiliert, läuft und gibt den minifizierten String zurück, denn das zweite Argument ist die Replacer-Funktion und das dritte ist die Einrückung.

Schlüssel zu sortieren ist eine separate Entscheidung

Schlüssel alphabetisch zu sortieren macht zwei Versionen desselben Dokuments diffbar – das ist der ganze Grund dafür, denn ohne die Sortierung erzeugt ein Serialisierer, der Schlüssel in Einfügereihenfolge ausgibt, ein Diff voller Verschiebungen. Standardmäßig ist sie hier aus, weil sie die Reihenfolge des Dokuments ändert, und bei einer Konfigurations- oder Lockdatei trägt diese Reihenfolge manchmal Bedeutung.

Einrückung, und was man wählt

Zwei Leerzeichen sind die Web- und JavaScript-Konvention und halten tief verschachtelte Dokumente auf dem Bildschirm. Vier sind die Norm in Python und großen Teilen der Backend-Welt. Tabs lassen jeden Leser seine eigene Breite wählen, was das stärkste Argument für sie ist und der Grund, warum manche Projekte darauf bestehen. Keine der drei Varianten ist richtiger als die anderen; die einzige falsche Antwort ist, sie innerhalb einer Datei zu mischen.

Das ändert nichts daran, was die Daten bedeuten

Leerraum zwischen Tokens ist in JSON nicht signifikant, Pretty-Printing ist also reversibel und verlustfrei – schicken Sie die Ausgabe durch einen Minifizierer, und Sie bekommen die Eingabe zurück, Byte für Byte, außer Sie haben zusätzlich die Schlüssel sortiert. Was es ändert, ist die Größe: Einrückung kann einem Dokument 20–40% hinzufügen, was auf der Leitung zählt und in einem Log, das Sie lesen, überhaupt nicht zählt.

Parst das Dokument nicht, kann es hier nichts formatieren, und der Fehler unten nennt Zeile und Spalte. Der JSON-Validator bietet außerdem an, die üblichen Ursachen zu reparieren – ein Komma am Ende, ein einfaches Anführungszeichen, ein Schlüssel ohne Anführungszeichen.

Nichts wird hochgeladen

Die Datei wird in diesem Tab verarbeitet. Benötigte Bibliotheken oder Modelle können heruntergeladen werden; die Datei selbst wird bei diesem Vorgang nicht hochgeladen.

Minifiziert

{"id":42,"tags":["prod","payment"],"ok":true}

Formatiert

{
  "id": 42,
  "tags": [
    "prod",
    "payment"
  ],
  "ok": true
}

Welche Optionen und Sonderfälle unterstützt JSON einrücken?

Technische Referenz und Optionen
ParameterTypStandardVerhalten & Sonderfälle
JavaScriptJSON.stringifyeingebautJSON.stringify(value, null, 2). Das zweite Argument ist der Replacer – das Übergeben von 2 tut dort nichts.
Pythonjson.dumpsStandardbibliothekjson.dumps(obj, indent=2). Fügen Sie ensure_ascii=False hinzu, oder jedes Nicht-ASCII-Zeichen wird escaped.
jqshell—jq . file.json, und jq -S . um Schlüssel zu sortieren. Vor jq 1.7 wurden große Ganzzahlen still geändert.
Befehlszeilepython3 -m json.tool—Auf fast jedem Computer vorhanden, mit --indent, --sort-keys und --no-ensure-ascii.
Goencoding/jsonStandardbibliothekjson.MarshalIndent für einen Wert, json.Indent für Bytes, die Sie bereits haben. Beide escapen spitze Klammern.
JavaJackson—writerWithDefaultPrettyPrinter(). Die Voreinstellung druckt Arrays in einer Zeile, bis Sie einen Array-Einzug setzen.
C#System.Text.Json.NET Core 3+JsonSerializerOptions { WriteIndented = true }. Escapes weit mehr, als die Spezifikation erfordert.
PHPjson_encodeeingebautJSON_PRETTY_PRINT, plus JSON_UNESCAPED_SLASHES und JSON_UNESCAPED_UNICODE, die man fast immer will.
RubyJSON.pretty_generateStandardbibliothekNicht dasselbe wie to_json, das kompact bleibt.
Rustserde_json—to_string_pretty. Ein Wert sortiert Schlüssel, es sei denn, das preserve_order-Feature ist aktiviert.
PowerShellConvertTo-JsoneingebautStandardmäßig -Depth 2 und schneidet darunter still ab. Geben Sie -Depth immer explizit an.

Häufig gestellte Fragen

Wie pretty-printe ich JSON in JavaScript?

JSON.stringify(value, null, 2). Die drei Argumente sind der Wert, ein Replacer und die Einrückung – der Fehler, den jeder einmal macht, ist daher JSON.stringify(value, 2), das die 2 in den Replacer-Platz setzt, nichts tut und den minifizierten String zurückgibt. Übergeben Sie für Tabs "\t" statt 2. Wissen Sie, was stringify nebenbei stillschweigend verwirft: undefined-Werte und Funktionen verschwinden aus Objekten und werden in Arrays zu null, ein Map oder Set wird zu {}, und ein BigInt wirft eine Ausnahme.

Wie pretty-printe ich JSON in Python?

json.dumps(obj, indent=2). Die Voreinstellung, in die Leute tappen, ist ensure_ascii=True, das jedes Nicht-ASCII-Zeichen escapet – „café“ kommt als „caf\u00e9“ heraus, gültig und unlesbar. Übergeben Sie ensure_ascii=False, um UTF-8 zu behalten, und öffnen Sie in dem Fall jede Ausgabedatei mit encoding="utf-8". sort_keys=True ordnet alphabetisch, was zwei Ausgaben diffbar macht.

Wie pretty-printe ich JSON von der Kommandozeile aus?

jq . file.json, wenn jq installiert ist; python3 -m json.tool file.json, wenn nicht, was fast jede Maschine mit Python darauf abdeckt. jq bietet Sortierung mit -S, eine einstellbare Einrückung mit --indent und Kompaktierung mit -c. Ein Hinweis: Bis jq 1.6 wurden Zahlen als Doubles geparst, sodass eine 64-Bit-ID stillschweigend verändert zurückkommen konnte – jq 1.7 erhält unveränderte Zahlenliterale, prüfen Sie also die Version, bevor Sie Bezeichner hindurchreichen.

Ist pretty-geprintetes JSON noch gültiges JSON?

Ja. Leerraum zwischen Tokens trägt in JSON keine Bedeutung, ein eingerücktes und ein minifiziertes Dokument parsen also zu exakt demselben Wert – RFC 8259 erlaubt Leerzeichen, Tab, Zeilenumbruch und Wagenrücklauf an jeder Stelle zwischen strukturellen Tokens. Der einzige Unterschied ist die Größe: Einrückung fügt typischerweise 20–40% hinzu, was sich vor dem Senden einer Payload über die Leitung entfernen lohnt und in allem, was ein Mensch liest, drinbleiben sollte.

Was ist der Unterschied zwischen Pretty Print, Formatieren und Beautify?

Als Verben: nichts – alle bedeuten, Leerraum hinzuzufügen, damit die Struktur sichtbar wird. Die drei Seiten hier unterscheiden sich darin, was sie sonst noch tun. Diese hier kombiniert den Formatierer mit dem Code, der es in jeder Sprache tut. Der JSON-Formatter hat den vollen Optionssatz: JSONC-Kommentare entfernen, Schlüssel sortieren, Unicode escapen. Der JSON-Beautifier zielt auf die eine spezielle Aufgabe, aus einem minifizierten Blob wieder etwas Lesbares zu machen. Nehmen Sie das, was zu Ihrem Anliegen passt.

Warum enthält meine pretty-geprintete Ausgabe \u-Escapes?

Weil der Serialisierer Nicht-ASCII-Zeichen escapet, und mehrere tun das standardmäßig. Pythons json.dumps hat ensure_ascii=True; C#s System.Text.Json escapet alles, was sein HTML-sicherer Encoder nicht mag; PHP escapet Nicht-ASCII, außer man sagt ihm etwas anderes. All das ist gültiges JSON, und nichts davon ist lesbar. Die Lösung ist in jedem Fall ein einziges Argument – ensure_ascii=False, UnsafeRelaxedJsonEscaping, JSON_UNESCAPED_UNICODE – und die Auswahl oben zeigt es für die Sprache, in der Sie gerade arbeiten.

Wird mein JSON an einen Server hochgeladen?

Nein. Parsen und Neu-Serialisieren passieren in diesem Tab, in JavaScript, das bereits auf der Seite geladen ist, und am anderen Ende gibt es keinen Endpunkt, an den irgendetwas gesendet werden könnte. Das zählt hier mehr, als es vielleicht klingt: Die Dokumente, die Leute pretty-printen, sind API-Antworten und Log-Zeilen, die routinemäßig Tokens, Session-Bezeichner und Kundendaten enthalten.