Zum Inhalt springen

JSON-Formatter

JSON einrücken oder minimieren, Fehler mit Zeile und Spalte. Schlüssel sortieren, Unicode-Escape, Kommentare; warnt bei großen Ganzzahlen, doppelten Schlüsseln.

0 Zeichen · 0 Zeilen
Modus

0 Zeichen · 0 Zeilen

Deine Eingaben werden nur in diesem Browser verarbeitet und nie an einen Server gesendet. So funktioniert es

Ein einzeiliges JSON-Objekt wird mit Zeilenumbrüchen und Einrückungen formatiert

Modus und Optionen

Unter „Modus“ stehen drei Möglichkeiten zur Wahl.

  • Formatieren: bricht das JSON in Zeilen um und rückt es ein, sodass die Struktur sichtbar wird. Die Einrückung stellst du in der Auswahlliste ein: „2 Leerzeichen“, „4 Leerzeichen“ oder „Tabulator“.
  • Minimieren: entfernt alle Leerzeichen und Zeilenumbrüche zwischen den Werten, übrig bleibt eine einzige Zeile. Die Auswahlliste für die Einrückung verschwindet in diesem Modus.
  • Prüfen: liefert dasselbe Ergebnis wie „Formatieren“ und zeigt bei korrekter Syntax zusätzlich den Hinweis „Das ist gültiges JSON.“ an. Auch wenn „Formatieren“ oder „Minimieren“ ein Ergebnis ausgibt, hat die Eingabe die Syntaxprüfung schon bestanden.

Die Kontrollkästchen wirken in allen drei Modi.

  • Schlüssel sortieren: sortiert die Schlüssel jedes Objekts nach Zeichencode, auch in verschachtelten Objekten. Großbuchstaben kommen dabei vor Kleinbuchstaben und die Buchstaben A–Z und a–z vor Nicht-ASCII-Zeichen wie é, 가 oder 日. Aus {"z":1,"a":{"c":2,"b":3}} wird {"a":{"b":3,"c":2},"z":1}. Die Reihenfolge innerhalb von Arrays bleibt unberührt.
  • Nicht-ASCII-Zeichen escapen (\uXXXX): schreibt Nicht-ASCII-Zeichen wie Buchstaben mit Akzent und Emojis in der Form \uXXXX. Aus "é😀" wird "\u00e9\ud83d\ude00". Das Emoji verteilt sich dabei auf zwei Codes.
  • Kommentare & trailing commas erlauben (JSON5/JSONC): dazu weiter unten ein eigener Abschnitt.

Unter dem Ergebnis stehen drei Zahlen. „Schlüssel“ zählt sämtliche Schlüssel, auch die der inneren Objekte. Bei der „Verschachtelungstiefe“ zählt die äußerste Klammer als 1. „Größe“ ist die Zahl der UTF-8-Bytes des Ergebnisses, nicht der Eingabe. Formatierst du {"order":{"id":1001,"items":[{"sku":"A1","qty":2}],"paid":true}} mit 2 Leerzeichen, steht dort: Schlüssel 6, Verschachtelungstiefe 4, Größe 129B. Wechselst du mit derselben Eingabe auf „Minimieren“, schrumpft nur die Größe.

Gleicher Wert, andere Schreibweise

Das Tool liest die Eingabe mit dem JSON-Parser des Browsers (JSON.parse) ein und schreibt sie anschließend neu. Deshalb ändern sich nicht nur die Leerzeichen. Wo es für denselben Wert mehrere Schreibweisen gibt, bleibt am Ende genau eine übrig.

Eingabe Ergebnis
1.0 1
0.10 0.1
1e2 100
1E-7 1e-7
-0 0
"\u00e9" "é"
"a\/b" "a/b"

Der Zahlenwert und der Inhalt der Strings bleiben gleich. Wer das Ergebnis aber Zeichen für Zeichen mit dem Original vergleicht, etwa bei einer Signaturprüfung, einem Hash-Vergleich oder einem zeilenweisen Diff, bekommt diese Unterschiede zu sehen. Eine Ausnahme ist -0: Hier geht das Vorzeichen verloren. Sei also vorsichtig, wenn die Daten an ein Programm gehen, das zwischen 0 und negativer Null unterscheidet.

Drei Warnungen, wenn sich ein Wert tatsächlich ändert

Es gibt Fälle, in denen ein Ergebnis ohne Fehler erscheint und trotzdem nicht mehr dem Original entspricht. Drei davon meldet das Tool als Warnung neben dem Ergebnis. Das Ergebnis wird trotz Warnung ausgegeben.

  • Ganzzahlen mit mehr als 15 Stellen: Eine JavaScript-Zahl speichert Ganzzahlen nur bis 2^53 - 1 (9007199254740991) exakt. Aus {"id":9007199254740993} wird im Ergebnis 9007199254740992, die letzte Ziffer hat sich geändert. Die Warnung richtet sich allerdings nach der Stellenzahl (Ganzzahlen mit 16 oder mehr Stellen) und nicht danach, ob sich der Wert wirklich geändert hat. Sie erscheint deshalb auch bei 1234567890123456, einer 16-stelligen Zahl, die unverändert bleibt. Zahlen mit Dezimalpunkt oder Exponent und Zahlen innerhalb von Strings zählen nicht mit. Müssen große IDs exakt erhalten bleiben, muss das System, das die Daten erzeugt, sie als String ausgeben ("id":"9007199254740993").
  • Zahlen außerhalb des darstellbaren Bereichs: Eine zu große Zahl wie 1e400 wird im Ergebnis zu null.
  • Doppelte Schlüssel im selben Objekt: Aus {"a":1,"a":2} wird {"a":2}. Der frühere Wert verschwindet, nur der letzte bleibt. Die Warnung nennt bis zu fünf der doppelten Schlüsselnamen.

So liest du die Fehlerposition

Bei einem Syntaxfehler erscheint statt des Ergebnisses eine Meldung wie „Das ist kein gültiges JSON. Prüfe die Stelle bei Zeile 3, Spalte 21.“, dazu die betroffene Zeile mit ihren Nachbarn und eine ^-Markierung.

2 |   "name": "a",
3 |   "tags": ["x", "y",]
  |                     ^
4 | }

Das ^ zeigt auf das erste Zeichen, an dem der Parser nicht mehr weiterkommt. Die Ursache sitzt an dieser Stelle oder direkt davor. Im Beispiel zeigt ^ auf ], zu korrigieren ist aber das Komma davor. Gemeldet wird immer nur der erste Fehler. Nach der Korrektur kann also der nächste auftauchen.

Daran scheitert der Parser besonders oft:

  • Komma nach dem letzten Element: [1, 2, 3,]
  • Strings in einfachen Anführungszeichen oder Schlüssel ohne Anführungszeichen: {'a': 1}, {a: 1}
  • Kommentare mit // oder /* */
  • Zahlen mit führender Null: 01
  • Werte, die JSON nicht kennt, etwa NaN oder undefined
  • ein echter Zeilenumbruch mitten im String (er muss als \n geschrieben werden)

Nur zwei davon, das Komma und die Kommentare, lassen sich mit der folgenden Option übergehen. Den Rest musst du von Hand korrigieren.

Was die Option für Kommentare und trailing commas tut

Standard-JSON (RFC 8259, ECMA-404) erlaubt weder Kommentare noch ein Komma nach dem letzten Element (trailing comma). In Dateien, die Menschen von Hand pflegen, etwa den Einstellungen eines Editors, sind aber Varianten verbreitet, die beides zulassen: JSONC (JSON with Comments) und JSON5. Mit „Kommentare & trailing commas erlauben (JSON5/JSONC)“ entfernt das Tool vor dem Parsen //-Kommentare, /* */-Kommentare und Kommas direkt vor einer schließenden Klammer. Ein // oder ein Komma innerhalb eines Strings rührt es nicht an, ein Wert wie "http://x//y" bleibt also, wie er ist.

Drei Dinge solltest du dazu wissen:

  • Unterstützt werden ausschließlich Kommentare und Kommas. Einfache Anführungszeichen oder Schlüssel ohne Anführungszeichen, die JSON5 ebenfalls erlaubt, bleiben auch mit der Option ein Fehler.
  • Das Ergebnis ist Standard-JSON, die Kommentare sind danach weg. Wer nur die Einrückung richten und die Kommentare behalten will, ist hier falsch.
  • Tritt bei eingeschalteter Option ein Fehler auf, zeigt der Ausschnitt trotzdem deine Eingabe, wie sie vor dem Entfernen der Kommentare war. Auch Zeilen- und Spaltennummer beziehen sich auf das Original. Steht in derselben Zeile vor der Fehlerstelle ein /* */-Kommentar, verschiebt sich die Spaltennummer dadurch nicht.

Willst du prüfen, ob gelieferte Daten wirklich Standard-JSON sind, lass die Option ausgeschaltet. Sonst geht auch eine Eingabe mit Kommentaren durch.

Quellen

Häufige Fragen

Wird nur die Syntax geprüft oder auch gegen ein JSON Schema validiert?

Nur die Syntax nach RFC 8259 und ECMA-404. Geprüft wird der Aufbau von JSON selbst: ob Klammern paarweise aufgehen, Strings in doppelten Anführungszeichen stehen und die Kommas an der richtigen Stelle sitzen. Ob ein Feld vorhanden ist, das ein bestimmtes Schema verlangt, oder ob ein Wert den richtigen Typ hat, sieht das Tool nicht. Ein Dokument kann im Modus „Prüfen“ also als gültiges JSON durchgehen und trotzdem gegen dein Schema verstoßen.

Ich habe „Schlüssel sortieren“ gar nicht eingeschaltet, trotzdem stehen die Schlüssel in anderer Reihenfolge da. Woran liegt das?

An Schlüsseln, die wie eine ganze Zahl ab 0 aussehen. Der JSON-Parser des Browsers zieht solche Schlüssel nach vorn und ordnet sie nach ihrem Zahlenwert. Aus {"b":1,"a":2,"10":0,"2":0} wird deshalb auch ohne Sortierung die Reihenfolge 2, 10, b, a. Mit eingeschalteter Sortierung bleibt es dabei: Die zahlenförmigen Schlüssel stehen nach Zahlenwert vorn, nur die übrigen werden nach Zeichencode sortiert.

Lässt sich eine Logdatei mit einem JSON-Objekt pro Zeile (JSON Lines) in einem Rutsch formatieren?

Nein. Das Tool liest die gesamte Eingabe als einen einzigen Wert. Folgen zwei Werte aufeinander, bricht es dort ab, wo der zweite beginnt. Steht in der ersten Zeile {"a":1} und in der zweiten {"b":2}, lautet der Fehler Zeile 2, Spalte 1. Füge die Zeilen entweder einzeln ein oder mach ein Array daraus: eckige Klammern um das Ganze und ein Komma zwischen den Zeilen.

Wie groß darf das JSON sein?

Ab mehr als 10 MB versucht das Tool gar nicht erst zu parsen und meldet nur, dass die Eingabe zu groß ist. Unabhängig von der Größe kann eine Eingabe mit sehr tief ineinandergeschachtelten Klammern an eine Grenze des Browsers stoßen. Dann erscheint der Fehler, dass die Verschachtelung zu tief ist. Wo diese Grenze liegt, ist von Browser zu Browser verschieden.

Zuletzt aktualisiert: