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 Ergebnis9007199254740992, 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 bei1234567890123456, 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
1e400wird im Ergebnis zunull. - 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
NaNoderundefined - ein echter Zeilenumbruch mitten im String (er muss als
\ngeschrieben 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.
