JSON formatieren
JSON formatieren, ohne dass dein Dokument je durch JSON.parse läuft – so erfährst du vom doppelten Key und von der zu großen Zahl, statt dass beide still gelöscht werden.
Kostenlos · Ohne Anmeldung · Nichts verlässt deinen Browser
Formatiert, minifiziert und prüft JSON in deinem Browser. Dein Dokument läuft nie durch JSON.parse, also ist ein doppelt geschriebener Key danach noch da, und eine Zahl, die für ein Double zu groß ist, behält ihre Stellen – genau die zwei Dinge, die jeder andere Formatter verliert, ohne es dir zu sagen.
1 Zeile · 110 Zeichen
11 Zeilen · 148 Zeichen
Gültiges JSON
Jeder String steht in doppelten Anführungszeichen, jede Zahl entspricht der JSON-Grammatik, und das Dokument enthält genau einen Wert.
Ein Key steht doppelt
1
portsteht 2-mal in Zeile 1 in$Alles, was das parst, behält
3000und wirft8080weg. In der Ausgabe unten bleiben beide erhalten, damit du entscheiden kannst, welchen du gemeint hast.
Laut RFC 8259 sollten Namen eindeutig sein, und was passiert, wenn sie es nicht sind, ist undefiniert – deshalb sind sich Parser uneinig. JavaScript, Python und jq behalten den letzten. Manche Decoder in Go und Rust lehnen das Dokument rundweg ab.
Eine Zahl ändert sich beim Parsen
1
$.tweet_id1234567890123456789 1234567890123456800 ← nach JSON.parse
Größer als 9.007.199.254.740.991, die größte Ganzzahl, die ein Double exakt hält. Datenbank-IDs, Snowflake-IDs und int64-Zähler landen ständig hier – die Lösung ist, den Wert als String zu schicken.
Die Ausgabe unten trägt noch die ursprünglichen Stellen, weil diese Seite deine Zahlen nie neu parst. Ein Formatter auf Basis von JSON.parse hätte die zweite Zeile ausgegeben, als hättest du sie so eingefügt.
- Wurzel
- Objekt · Verschachtelungstiefe 3
- Keys
- 6 · 1 Objekte, 1 Arrays
- Duplikate
- 1 · Werte still verworfen
- Größe
- 135 % · 148 von 110 Zeichen
Alles läuft in deinem Browser – das Dokument wird nie hochgeladen, geloggt oder gespeichert. In JSON stecken Access Tokens, Kundendaten und API-Antworten – ein guter Grund, es nicht auf den Server von jemand anderem zu kopieren, nur um es einzurücken.
Tekk lässt Loops über deine Codebase laufen, die finden, was sich verbessern lässt, und deinem Coding-Agent die Spec übergeben, sobald du es mit Greenlight freigibst – für die Bugs, die überleben, weil niemand nach ihnen gesucht hat.
So funktioniert’s
- 1
Einfügen und das Ergebnis lesen
Hier kannst du JSON formatieren, während du tippst – ohne Absenden-Button und ohne Upload. Lässt sich das Dokument nicht parsen, bekommst du Zeile, Spalte, die betroffene Quellzeile und die wahrscheinliche Ursache, nicht nur das Wort „invalid“, das die meisten Online-Tools ausgeben.
- 2
Prüf das Panel für doppelte Keys
Ein doppelt geschriebener Key ist kein Syntaxfehler, also lehnt ihn nichts ab. JavaScript, Python und jq behalten den letzten und werfen den ersten weg. Du bekommst beide mit Zeilennummern, und beide bleiben in der Ausgabe erhalten, damit du entscheiden kannst, welchen du gemeint hast.
- 3
Prüf das Zahlen-Panel
Jede Zahl mit mehr Stellen, als ein Double fassen kann, wird aufgelistet – zusammen mit dem, was nach dem Parsen aus ihr wird. Snowflake-IDs, int64-Zähler und Datenbank-Keys landen hier ständig, und die Verfälschung bleibt unsichtbar, weil das JSON weiterhin gut aussieht.
Was der Umweg löscht
Fast jedes Online-JSON-Tool besteht unter der Haube aus denselben drei Wörtern:
JSON.stringify(JSON.parse(input), null, 2)
Es funktioniert, es ist schnell, und unterwegs gehen zwei Dinge verloren – beide stillschweigend, und beide genau das, wofür du einen Formatter überhaupt geöffnet hast.
1. Ein doppelt geschriebener Key
{
"service": "checkout",
"port": 8080,
"port": 3000
}
Das ist kein Syntaxfehler. RFC 8259 sagt, Namen sollten eindeutig sein, und lässt offen, was passiert, wenn sie es nicht sind. Parser dürfen sich also uneinig sein – und das sind sie. JavaScript, Python und jq behalten den letzten. Manche Decoder in Go und Rust lehnen das Dokument ab. Ein strikter JSON-Schema-Validator sieht es vielleicht, vielleicht auch nicht.
8080 ist also weg, nichts hat etwas gesagt, und ausgerechnet der Formatter, der dir das Problem zeigen sollte, hat es gelöscht.
Diese Seite behält beide, sagt dir, in welcher Zeile jeder steht, und welchen ein Parser behalten hätte.
2. Eine Zahl, größer als ein Double
{ "tweet_id": 1234567890123456789 }
Schick das durch JSON.parse und wieder zurück:
{ "tweet_id": 1234567890123456800 }
Die letzten drei Ziffern sind anders. JSON.parse legt jede Zahl in einem IEEE-754-Double ab, das Ganzzahlen nur bis 9.007.199.254.740.991 exakt darstellt – und 19-stellige IDs sind heute normal. Snowflake-IDs, int64-Primärschlüssel, Objekt-IDs von Discord und Twitter, Geldbeträge in kleinsten Währungseinheiten in einem großen Ledger.
Nichts wirft einen Fehler. Das JSON sieht weiter aus wie JSON. Die ID ist einfach falsch und bleibt falsch – und genau deshalb schicken APIs mit großen Ganzzahlen diese als Strings.
Diese Seite behält den Quelltext jeder Zahl und parst ihn nie neu, die Ausgabe trägt also genau die Ziffern, die du eingefügt hast. Das Panel zeigt dir, welche Werte den Parser von jemand anderem nicht überleben würden.
Fehler, mit einer Stelle zum Nachsehen
| Fehler | Was er meistens bedeutet |
|---|---|
| Trailing Comma | Erlaubt in JavaScript und JSON5, nie in JSON. Der häufigste Grund, warum eine von Hand bearbeitete Datei nicht mehr parst. |
| Kommentar | Die Datei ist JSONC – normal für tsconfig.json und .vscode/settings.json, abgelehnt von JSON.parse. |
| String in einfachen Anführungszeichen | Ein JavaScript-Objektliteral oder ein Python-Dict, kein JSON. |
| Key ohne Anführungszeichen | Dasselbe. JSON verlangt, dass jeder Key ein String in doppelten Anführungszeichen ist. |
True / False / None |
Python. Das kam aus print() auf einem Dict statt aus json.dumps(). |
NaN / Infinity |
JSON kann keins von beiden ausdrücken. Serialisierer geben meist null aus. |
| Führende Null in einer Zahl | Kein gültiges JSON. Ist es eine Postleitzahl oder eine ID, gehört sie in einen String – sonst geht die führende Null verloren. |
| String wird nie geschlossen | Ein echter Zeilenumbruch in einem String. Schreib stattdessen \n. |
Jeder Fehler wird mit Zeile, Spalte und der Quellzeile gemeldet, in der er passiert ist – und das Dokument wird trotzdem konvertiert, sodass du aus einer Datei, die nicht parst, striktes JSON bekommst.
JSON Lines ist kein kaputtes JSON
{"level":"info","msg":"started"}
{"level":"warn","msg":"retrying"}
Das ist NDJSON – ein Dokument pro Zeile, kein umschließendes Array, keine Kommas. So sieht die Ausgabe von Log-Pipelines, Bulk-Import-APIs und Streaming-Endpunkten aus, und es ist kein Fehler. Ein Formatter, der „unexpected token on line 2“ meldet, schickt dich auf die Suche nach einem Syntaxfehler, den es nicht gibt. Diese Seite prüft deshalb, ob jede Zeile für sich parst, und sagt dir, was sie tatsächlich vor sich hat.
Was es nicht tut
Es prüft, ob das Dokument wohlgeformtes JSON ist. Gegen ein JSON Schema validiert es nicht – dafür braucht es das Schema, und diese Seite bittet dich nie, eins mitzugeben.
Es sortiert auch nicht deine Keys, klappt keine Arrays zusammen und normalisiert dein Unicode nicht in \u-Escapes. Das sind alles vertretbare Entscheidungen in einem Linter und alle falsch in einem Formatter, wo die einzige sichere Annahme ist, dass alles außer dem Whitespace Absicht war.
Häufige Fragen
- Speichert ihr mein JSON oder ladet ihr es hoch?
- Nein. Der Parser besteht aus ein paar Kilobyte JavaScript, die auf deinem Rechner laufen – es gibt keinen Server-Aufruf, nichts wird geloggt, und es gibt kein Konto. In JSON stecken Access Tokens, Kundendaten und API-Antworten. Ein guter Grund, es nicht auf den Server von jemand anderem zu kopieren, nur um Einrückungen hinzuzufügen.
- Was kann dieses Tool, was andere JSON Formatter nicht können?
- Es verwendet kein JSON.parse. Fast jeder Online-Formatter ist unter der Haube JSON.stringify(JSON.parse(input), null, 2), und dieser Umweg zerstört zwei Dinge, bevor er sie melden kann: einen doppelt geschriebenen Key und die Stellen jeder Zahl, die für ein Double zu groß ist. Diese Seite zerlegt und parst den Text selbst und behält den Quelltext jedes Werts, sodass beides erhalten bleibt und dir angezeigt werden kann.
- Warum warnt es vor einem doppelten Key, wenn meine Datei doch funktioniert?
- Weil sie nur zufällig funktioniert. RFC 8259 sagt, Objektnamen SOLLTEN eindeutig sein, und lässt offen, was passiert, wenn sie es nicht sind – also sind sich Parser uneinig: JavaScript, Python und jq behalten das letzte Vorkommen, manche Decoder in Go und Rust lehnen das Dokument rundweg ab. Eine Config-Datei mit einer doppelt eingetragenen Einstellung nutzt stillschweigend eine davon, und die andere ist die Änderung, die du gemacht zu haben glaubst.
- Warum sollte sich eine Zahl beim Parsen ändern?
- JSON.parse legt jede Zahl in einem IEEE-754-Double ab, das Ganzzahlen nur bis 9.007.199.254.740.991 exakt darstellt. Eine 19-stellige Snowflake-ID kommt mit anderen Endziffern zurück. Kein Fehler, keine Warnung – der Wert ist ab da einfach falsch. Deshalb schicken APIs, die große IDs verwenden, diese als Strings.
- Warum lässt sich mein JSON nicht parsen?
- Nach Häufigkeit sortiert: ein Trailing Comma vor einer schließenden Klammer, ein Kommentar, einfache statt doppelter Anführungszeichen, ein Key ohne Anführungszeichen und ein echter Zeilenumbruch in einem String. Alle fünf sind gültiges JavaScript und keins davon gültiges JSON. Statt beim ersten aufzuhören, nennt diese Seite jedes Vorkommen mit seiner Position und konvertiert das Dokument trotzdem.
- Kommt es mit Kommentaren klar, wie in tsconfig.json?
- Ja. Dateien wie tsconfig.json und .vscode/settings.json sind JSONC, nicht JSON – sie enthalten Kommentare, die JSON.parse ablehnt. Füg eine ein, und die Kommentare werden entfernt und gemeldet; heraus kommt striktes JSON, das du überall weiterverwenden kannst.
- Kann ich ein Python-Dict oder ein JavaScript-Objekt einfügen?
- Ja, und genau das haben die meisten tatsächlich vor sich. True, False und None werden zu true, false und null; einfache Anführungszeichen werden zu doppelten; Keys ohne Anführungszeichen bekommen welche; NaN und Infinity werden zu null, weil JSON sie nicht ausdrücken kann. Alles, was geändert wurde, wird aufgelistet – nichts passiert stillschweigend.
- Funktioniert es als JSON Beautifier für minifizierte API-Antworten?
- Dafür ist es vor allem da. Füg eine einzeilige Antwort aus curl oder dem Netzwerk-Tab des Browsers ein, wähl 2, 4 oder 8 Leerzeichen, und schon kannst du das JSON formatieren und lesen. Als JSON Beautifier ist es auch der schnellste Weg, um herauszufinden, ob der Payload, den du bekommen hast, der ist, den du erwartet hast.
- Gibt es auch einen JSON Minifier?
- Ja – der Minify-Schalter entfernt jedes Byte an bedeutungslosem Whitespace und gibt das Dokument in einer Zeile zurück. Der JSON Minifier lässt Strings unangetastet, denn Whitespace in einem String sind Daten, und ihn zu entfernen würde den Wert ändern.
- Ist das auch ein JSON Validator?
- Für die Syntax, ja. Ein JSON Validator in diesem Sinn beantwortet, ob das Dokument wohlgeformtes JSON ist, und diese Seite tut das mit der genauen Position von allem, was es nicht ist. Gegen ein JSON Schema validiert sie nicht – dafür braucht es das Schema, und diese Seite fragt nie danach. Jedes Tool, das ohne Schema zu validieren behauptet, prüft die Syntax und benutzt dafür ein größeres Wort.
- Meine Logdatei lässt sich nicht parsen. Was ist JSON Lines?
- Ein JSON-Dokument pro Zeile, ohne umschließendes Array und ohne Kommas – das, was die meisten Log-Pipelines und Bulk-APIs ausgeben. Ein Formatter, der einen Syntaxfehler in Zeile 2 meldet, schickt dich auf die Suche nach einem Fehler, den es nicht gibt. Diese Seite prüft deshalb auf JSON Lines und sagt es dir.
- Verändert das Formatieren mein Dokument?
- Nur den Whitespace zwischen den Werten, den JSON als bedeutungslos behandelt. Keys bleiben in der Reihenfolge, in der du sie geschrieben hast, Escape-Sequenzen werden Byte für Byte übernommen, Unicode bleibt Unicode statt escaped zu werden, und Zahlen werden nie neu geparst. Wenn du JSON formatieren lässt und das Ergebnis noch einmal formatierst, kommt dasselbe heraus.
- Gibt es eine Größenbeschränkung?
- Keine feste Grenze, aber die Seite parst bei jedem Tastendruck neu, ein Dokument mit mehreren Megabyte fühlt sich im Textfeld also zäh an. Bei so großen Dateien füg lieber einen repräsentativen Ausschnitt ein statt des Ganzen.
- Warum ist das kostenlos, und was ist Tekk?
- Tekk macht dein Produkt zu Software, die sich selbst verbessert: Sechzehn Loops beobachten deine Codebase und bringen dir Proposals, die du mit Greenlight freigibst oder ablehnst, und dein Coding-Agent baut das Ergebnis. Diese Seite kostet uns im Betrieb nichts, weil nichts auf unseren Servern läuft – deshalb gibt es keine Anmeldepflicht, kein Nutzungslimit und keinen Upsell im Tool.
Willst du eine echte Spec für das, was du baust?
Schreib einen Satz. Tekk liest deinen Code und schreibt die Spec, die dein Coding-Agent baut – und seine Loops behalten im Blick, was du auslieferst.
Kostenlos testen · GitHub bei der Registrierung verbinden