JSON formatieren

Füge JSON ein und lies es. Das Dokument wird geparst und neu ausgegeben, statt als Text neu eingerückt zu werden — und das ist der Unterschied zwischen einem Formatierer, der eine geschweifte Klammer innerhalb eines Strings versteht, und einem, der sie zerstört. Nichts wird hochgeladen: API-Antworten sind das mit Abstand Häufigste, was in ein solches Feld eingefügt wird, und sie gehen selten jemand Fremdes etwas an.

Nützlich vor einem Vergleich. Die Reihenfolge von Arrays bleibt unangetastet — ein Array ist eine Folge.

Ergebnis

Die Antwort erscheint hier, während du tippst.

  • Wo es läuft

    Es wird nichts hochgeladen, weil es keine Datei gibt — gerechnet wird in dieser Seite.

  • Keine Warteschlange, kein Konto

    Es antwortet so schnell, wie dein Rechner es hergibt, und fragt nie, wer du bist.

  • So oft du willst

    Nichts wird gezählt und nichts begrenzt — noch einmal zu antworten kostet uns nichts.

So funktioniert es

  1. Füge das JSON in das Feld ein. Es wird beim Tippen neu formatiert.
  2. Wähle die Einrückung deines Projekts, und sortiere die Schlüssel, wenn du gleich vergleichen willst.
  3. Kopiere das Ergebnis. Dein Rechner hat dafür nichts verlassen.

Es parst das Dokument, statt den Text neu einzurücken

Der billige Weg zu einem Formatierer ist, die Zeichen durchzugehen und nach jeder Klammer und jedem Komma einen Zeilenumbruch zu setzen. Das sind fünfzig Zeilen, es funktioniert bei den meisten Eingaben, und es scheitert an genau dem Fall, auf den es ankommt: einer Klammer, einer eckigen Klammer oder einem Komma innerhalb eines String-Werts. Eine URL mit Query, ein als Einstellung gespeicherter regulärer Ausdruck, eine Nachricht mit einem Komma darin — und schon ist die Ausgabe kein gültiges JSON mehr.

Diese Seite schickt das Dokument durch einen echten Parser und gibt das Ergebnis aus. Daraus folgt: Was sie zurückgibt, lässt sich garantiert parsen, und was sie ablehnt, lässt sich tatsächlich nicht parsen. Einen dritten Zustand, in dem ein Werkzeug die Eingabe halb verstanden und etwas Plausibles produziert hat, gibt es nicht.

Was der Umweg über den Parser still verändert

Parsen und neu ausgeben ist nicht folgenlos, und ein Werkzeug, das das verschweigt, verbirgt etwas. Zahlen werden in ihrer kürzesten exakten Form neu geschrieben, aus `1.0` wird also `1` und aus `1e3` wird `1000`. Doppelte Schlüssel fallen auf den letzten zusammen, weil jeder JSON-Parser das so macht. Unnötige Maskierungen verlieren ihren Backslash.

Nichts davon ändert, was das Dokument für einen Parser bedeutet, und deshalb ist es vertretbar. Wenn du die Bytes exakt brauchst — weil du das Dokument signierst oder eine Prüfsumme vergleichst —, formatiere es gar nicht: Jeder Formatierer, der neu einrückt, hat die Bytes bereits verändert.

Schlüssel sortieren ist für Vergleiche, nicht für Ordnung

Zwei Systeme, die dasselbe Objekt serialisieren, geben seine Schlüssel oft in unterschiedlicher Reihenfolge aus — und der resultierende Vergleich ist so groß wie die Datei, was das Prüfen einer echten Ein-Feld-Änderung unmöglich macht. Sortiert man beide Seiten vorher, schrumpft er auf die Änderung selbst.

Arrays bleiben bewusst unangetastet. Ein Objekt ist per Definition ungeordnet, seine Schlüssel umzustellen ändert nichts; ein Array ist eine Folge, und es zu sortieren ändert die Daten. Werkzeuge, die beides sortieren, gibt es, und sie stellen klaglos eine Liste von Arbeitsschritten, Koordinaten oder Datenbankmigrationen um.

Zwei Leerzeichen, vier oder ein Tabulator

Zwei Leerzeichen sind bei JSON in den meisten Ökosystemen die Konvention und das, was `npm`, `composer` und die meisten Linter erzeugen. Vier begegnen einem in Python-nahen Projekten, weil es zur Sprache passt. Ein Tabulator ist richtig, wo eine Datei in Editoren mit unterschiedlichen Vorlieben gelesen wird, denn dort entscheidet der Lesende über die Breite.

Nicht mehr Geschmackssache ist es in einem Repository, in dem bereits ein Formatierer konfiguriert ist. Nimm dessen Einstellung — eine mit anderer Einrückung neu formatierte Datei erzeugt einen Vergleich, der jede Zeile berührt, und das kostet die prüfende Person weit mehr, als die Einrückung je wert war.

Kommentare gibt es in JSON nicht

Eine Datei mit `//` darin ist kein JSON, und eine mit einem Komma vor der schließenden Klammer auch nicht. Beides ist JSON5 oder JSONC — andere Sprachen, die zufällig ähnlich aussehen —, und beides ist in Konfigurationsdateien weit verbreitet: `tsconfig.json` ist JSONC, was regelmäßig überrascht, wenn jemand es mit einem strengen Parser einliest.

Diese Seite lehnt das ab, statt es stillschweigend wegzuräumen, und das ist das nützlichere Verhalten: Sie sagt dir, dass die Datei dort, wohin du sie gleich schickst, nicht durchgehen wird. Ein Formatierer, der Kommentare kommentarlos entfernt, gäbe dir eine funktionierende Datei und ein falsches Bild davon, womit du es zu tun hast.

Sehr große Ganzzahlen überstehen es nicht — nirgends

JSON-Zahlen werden zu Gleitkommazahlen doppelter Genauigkeit, und die halten Ganzzahlen nur bis etwa neun Billiarden exakt. Darüber wird eine Kennung gerundet: eine Snowflake-ID, eine alte Twitter-Status-ID, manche Primärschlüssel. Aus `12345678901234567890` wird `12345678901234567000`, und nichts in der Ausgabe sagt es.

Diese Seite bemerkt es und weist darauf hin, mehr kann sie nicht tun. Die Lösung liegt weiter oben: Systeme, die solche Kennungen ausgeben, verschicken sie aus genau diesem Grund als Zeichenketten — und wenn deines das nicht tut, ist das Formatieren nicht der Schritt, an dem sich das reparieren lässt.

Warum es „Beautifier“ und „Viewer“ hier nicht gesondert gibt

Beide Begriffe werden gesucht, und beide meinen dieses Werkzeug. Eine zweite Seite mit demselben Feld und umformulierter Erklärung wäre eine Doorway-Page — genau das Muster, das der Rest dieser Website vermeidet, und dieselbe Entscheidung, die dort schon für „Zeichenzähler“ getroffen wurde.

Beide Fragen werden also hier beantwortet. Wer JSON „verschönern“ oder „anzeigen“ wollte, ist hier richtig, und eine gute Seite hat gegen eingesessene Konkurrenz bessere Aussichten als zwei dünne.

Warum das lokal rechnet

Was in einen JSON-Formatierer eingefügt wird, ist fast immer eine Antwort aus einem System, an dem jemand arbeitet — samt allem, was sie enthält: Kundendaten, interne Kennungen, gelegentlich ein Token in einem Feld, in dem es nicht sein sollte.

Das an einen fremden Server zu schicken, damit er Zeilenumbrüche einfügt, ist ein sehr schlechtes Tauschgeschäft. Die Arbeit erledigt der eingebaute Parser deines Browsers in Millisekunden, und das Netzwerk-Panel zeigt dabei nichts.

Doppelte Schlüssel, und wer gewinnt

JSON verbietet nicht, denselben Schlüssel zweimal in ein Objekt zu schreiben — die Spezifikation nennt das Verhalten schlicht undefiniert. In der Praxis behalten fast alle Parser den letzten, auch der im Browser, und das heißt: Ein Dokument mit doppeltem Schlüssel geht hier durch und kommt einfach kürzer wieder heraus.

Das ist eine der wenigen Stellen, an denen Formatieren tatsächlich Daten verliert, und deshalb steht es hier. Wenn eine formatierte Datei kleiner ist, als sie sein sollte, ist ein doppelter Schlüssel die erste Vermutung — und die Ursache liegt fast immer bei einem Generator, der zwei Quellen zusammenschreibt, ohne zu prüfen.

Was Einrücken für die Dateigröße bedeutet

Formatiertes JSON besteht typischerweise zu zwanzig bis vierzig Prozent aus Leerraum. Das klingt nach viel und ist über das Netz meist bedeutungslos, weil Antworten komprimiert übertragen werden und gzip mit Folgen von Leerzeichen ausgezeichnet umgeht — komprimiert liegt der Unterschied oft unter fünf Prozent.

Ins Gewicht fällt es dort, wo nicht komprimiert wird: in einer Umgebungsvariablen, einer Datenbankspalte, einer einzelnen Logzeile, einem Feld mit harter Längenbegrenzung. Wer eine dieser Grenzen vor sich hat, will die Seite zum Minifizieren; wer eine Datei lesen will, ist hier richtig.

JSON formatieren: häufige Fragen

Wird mein JSON zum Formatieren hochgeladen?

Nein. Parsen und Ausgeben passieren beide in dieser Seite, und im Netzwerk-Panel ist zu sehen, dass nichts dein Dokument trägt. Das wiegt hier schwerer als bei den meisten Werkzeugen: Was Leute in einen JSON-Formatierer einfügen, ist meist eine API-Antwort aus einem System, an dem sie arbeiten.

Warum wird meine Datei mit Kommentaren abgelehnt?

Weil JSON keine Kommentare hat. Eine Datei mit // oder einem Komma vor der schließenden Klammer ist JSON5 oder JSONC — ähnlich aussehende, andere Sprachen, und genau das, was tsconfig.json ist. Die Ablehnung sagt dir, dass ein strenger Parser sie ebenfalls ablehnen wird, und das ist nützlicher, als die Kommentare stillschweigend zu entfernen.

Verändert es meine Daten?

Nicht deren Bedeutung, aber die Bytes ändern sich: Zahlen werden in kürzester exakter Form neu geschrieben, doppelte Schlüssel fallen auf den letzten zusammen, unnötige Maskierungen entfallen. Das macht jedes Parsen-und-neu-Ausgeben. Wenn du die Bytes exakt brauchst, etwa für eine Signatur oder Prüfsumme, formatiere gar nicht erst.

Soll ich die Schlüssel sortieren?

Nur wenn du gleich zwei Dokumente vergleichst. Sortiert man beide Seiten, zeigt der Vergleich die tatsächliche Änderung statt jeder Zeile, weil zwei Systeme dasselbe Objekt oft unterschiedlich anordnen. Die Reihenfolge von Arrays wird nie angetastet — ein Array ist eine Folge, und sie zu sortieren ändert die Daten.

Wie groß darf das Dokument sein?

So groß, wie dein Browser es in einem Textfeld hält. Es gibt keinen Server, der die Arbeit macht, also wird nichts gemessen — aber ein Dokument von mehreren Megabyte lässt den Tab bei jedem Tastendruck nachdenken, und in dieser Größenordnung bist du mit dem Formatierer in deinem Editor besser bedient.

Weitere Werkzeuge