JSON Formatter
Format, validate and minify JSON with syntax highlighting.
Geprüft von Aygul Dovletova · Zuletzt geprüft
Den JSON-Formatter verwenden
- JSON einfügen oder eingeben in das große Monospace-Textfeld mit der Beschriftung "Paste your JSON here...". Das Feld akzeptiert API-Antworten, Log-Payloads, Konfigurationsdateien oder einen einzelnen Wert wie
42oder"hello". - Einrückung wählen aus dem Dropdown rechts: 2 Leerzeichen (der Community-Standard, genutzt von npm, Prettier und den meisten REST-APIs) oder 4 Leerzeichen (häufiger in Python und manchen Enterprise-Java-Shops).
- Format klicken, um mit Zeilenumbrüchen und Einrückungen zu verschönern, oder Minimieren, um alles in eine Zeile zu kollabieren und unbedeutende Leerzeichen zu entfernen.
- Fehler lesen, falls welche erscheinen. Ungültige Eingaben zeigen den genauen
SyntaxErrorder Engine, inklusive der Zeichenposition, damit du zum problematischen Token springen kannst. - Ausgabe kopieren mit der Kopier-Schaltfläche oben rechts im Ausgabefeld, oder den gerenderten
<pre>-Block manuell für teilweise Kopien auswählen.
Was der Formatter im Hintergrund macht
Der Formatter ist ein schlanker, ehrlicher Wrapper um zwei eingebaute JavaScript-Methoden: JSON.parse(input), gefolgt von JSON.stringify(parsed, null, indent). Wenn du auf Format klickst, durchläuft der Parser den String mit den Regeln aus ECMA-404 und RFC 8259 und lehnt alles ab, was außerhalb der JSON-Grammatik liegt. Der resultierende In-Memory-Baum (Objekte, Arrays, Strings, Zahlen, Boolesche Werte und null) wird dann mit dem Einrückungsargument auf 2 oder 4 Leerzeichen gesetzt zurückserializiert, was die Zeilenumbruch-pro-Schlüssel-Ausgabe der Standardbibliothek auslöst.
Minimieren ruft JSON.stringify(parsed) ohne Einrückungsargument auf und erzeugt die kompakteste kanonische Form, die die Spezifikation erlaubt. Da beide Pfade durch einen vollständigen Parse gehen, ist eine erfolgreiche Ausgabe auch ein Gültigkeitszertifikat für JSON: fehlerhafte Eingaben können nicht verschönert werden. Die gesamte Pipeline wird auf der JavaScript-Engine des geöffneten Tabs ausgeführt (V8 in Chrome und Edge, SpiderMonkey in Firefox, JavaScriptCore in Safari), sodass keine Netzwerkanfrage zum Formatierungszeitpunkt erfolgt und kein Server deine Payload sieht.
Wann dieses Werkzeug sich lohnt
- Einen minimierten Webhook-Body untersuchen, der aus einem Proxy wie Charles, mitmproxy oder einem Cloudflare-Request-Log kopiert wurde.
- Eine kompakte
package.json,tsconfig.jsonoder ein OpenAPI-Dokument bereinigen, bevor es committed wird. - Einen großen Konfigurationsblob verkleinern, bevor er in eine Umgebungsvariable oder einen Query-String eingebettet wird.
- Prüfen, ob ein handgeschriebenes JSON-Fixture parst, bevor es in eine Test-Suite geliefert wird.
- Eine verschachtelte GraphQL-Antwort einem Teamkollegen in einem Call erklären, wo lesbare Einrückung wichtiger ist als Dateigröße.
- Sanity-Check, ob ein Backend, das behauptet, JSON auszugeben, nicht heimlich JSONP oder JSON5 produziert.
Typische Fallstricke und Sonderfälle
- Abschließende Kommas wie
{"a":1,}sind in JavaScript-Objekt-Literalen und JSON5 legal, aber in striktem JSON illegal. Der Parser lehnt sie mit einemSyntaxErrorab. - Kommentare (
//oder/* */) sind in RFC 8259 nie erlaubt. Entferne sie vor dem Einfügen, wenn deine Quelle eine JSONC-Datei wietsconfig.jsonist. - Einfache Anführungszeichen um Schlüssel oder Strings sind ungültig; nur doppelte Anführungszeichen werden akzeptiert. Python-
repr()-Ausgaben treffen dieses Problem oft. - Nicht in Anführungszeichen gesetzte Schlüssel wie
{name:"Ada"}parsen in JS, aber nicht in JSON. Jeden Schlüssel in Anführungszeichen setzen. - NaN, Infinity und
undefinedsind keine JSON-Werte;JSON.parsewirft bei ihnen Fehler, obwohl sie gültiges JavaScript sind. - Große Zahlen jenseits von
Number.MAX_SAFE_INTEGER(2^53 - 1) verlieren beim Parsen an Präzision. Für Order-IDs oder Blockchain-Beträge als Strings behalten.
JSON kompakt: RFC 8259 und ECMA-404
JSON (JavaScript Object Notation) wurde Anfang der 2000er Jahre von Douglas Crockford eingeführt und zweimal standardisiert: einmal von ECMA International als ECMA-404 und einmal von der IETF als RFC 8259 (das die älteren RFCs 4627 und 7159 ersetzt). Die Grammatik ist bewusst klein: Ein Wert ist ein Objekt, Array, String, eine Zahl, ein Boolescher Wert oder null, wobei Leerzeichen außerhalb eines Tokens erlaubt sind. RFC 8259 schreibt UTF-8 für den Netzwerkverkehr vor, weshalb Server, die UTF-16- oder Latin-1-JSON ausgeben, Clients kaputt machen. Ein wohlgeformtes JSON-Dokument ist ein einzelner Wert, sodass ein blankes [1,2,3] auf der obersten Ebene gültig ist, nicht nur in einem Objekt verpackt. Kommentare, abschließende Kommas und Hexadezimalzahlen sind absichtlich ausgeschlossen; die Einfachheit ist das Feature.
Alternativen und wann sie besser sind
Kommandozeilen-jq ist besser, wenn du JSON abfragen oder transformieren musst, nicht nur Leerzeichen umformen: Es verarbeitet Streaming über Gigabytes und hat eine echte Abfragesprache. Pythons python -m json.tool ist in einer Terminal-Pipeline praktisch und auf den meisten Unix-Systemen bereits installiert. IDE-Plugins wie Prettier, VS Codes eingebautes Format-Dokument oder das JSON-Werkzeugfenster von JetBrains formatieren direkt ohne Copy-Paste. Ein Browser-Formatter wie dieser gewinnt, wenn du einen einzelnen Blob in der Zwischenablage hast, keine Shell offen ist und du keine sensiblen Daten in einen Remote-Dienst wie jsonformatter.org oder online-json.com einfügen möchtest. Für alles, was größer als etwa 20 MB ist, wechsle zu einem Streaming-Parser wie jq, simdjson oder dem stream-json-Paket für Node, da der einmalige JSON.parse den gesamten geparsten Baum im Tab-Speicher hält.
Häufig gestellte Fragen
Wird mein JSON beim Formatieren an einen Server gesendet?
Nein. Die Schaltflächen Format und Minimieren rufen beide die browsereigenen Funktionen <code>JSON.parse</code> und <code>JSON.stringify</code> im Seiten-Thread auf, und die gerenderte Ausgabe wird direkt in einen DOM-Knoten geschrieben. Es gibt keinen <code>fetch</code>-Aufruf, kein WebSocket und keinen Service Worker, der den Text abfängt. Du kannst die Entwicklertools öffnen, zum Netzwerk-Tab wechseln und es selbst bestätigen oder die Seite nach dem ersten Laden vollständig offline betreiben.
Warum lehnt der Parser mein JSON ab, obwohl es korrekt aussieht?
Die häufigsten Ursachen sind abschließende Kommas, einfache Anführungszeichen, nicht in Anführungszeichen gesetzte Schlüssel, JavaScript-ähnliche Kommentare oder BOM-Zeichen am Dateianfang. Striktes JSON ist eine Teilmenge der JavaScript-Objekt-Literal-Syntax, sodass alles, was ein JavaScript-Entwickler beiläufig schreibt, möglicherweise <code>JSON.parse</code> nicht übersteht. Die Fehlermeldung zeigt den Zeichenindex an; zähle Zeichen vom Anfang oder füge es in einen Editor mit einem Lineal ein, um es schnell zu finden.
Was ist der Unterschied zwischen formatieren, minimieren und linten?
Formatieren schreibt nur Leerzeichen um: Schlüssel, Werte und Reihenfolge bleiben erhalten. Minimieren berührt ebenfalls nur Leerzeichen, aber in die entgegengesetzte Richtung - es entfernt alle Zeichen, die die Spezifikation als bedeutungslos markiert. Linten (jsonlint, ajv oder ein JSON-Schema- Validator) prüft zusätzlich semantische Regeln: erforderliche Schlüssel, Datentypen, Enum-Mitgliedschaft, Regex-Muster. Dieses Werkzeug erledigt die ersten beiden; es validiert nicht gegen ein Schema.
Wie groß darf eine JSON-Datei sein, bevor der Tab langsam wird?
Die V8- und SpiderMonkey-Parser verarbeiten theoretisch mehrere Hundert Megabyte, aber der Tab muss den Eingabe-String, den geparsten Baum und den formatierten Ausgabe-String gleichzeitig halten, sodass die praktische Komfortgrenze bei etwa 20 bis 50 MB liegt. Darüber hinaus verwende ein Streaming-CLI-Werkzeug wie <code>jq</code> oder schreibe ein kleines Node-Skript mit <code>stream-json</code>. Sehr große Arrays machen das <code><pre></code>-Element auch träge, weil der Browser jede Zeile ausgibt.
Bewahrt der Formatter die Reihenfolge der Objektschlüssel?
Ja. ECMA-262 garantiert die Einfügereihenfolge für String-Schlüssel bei einfachen Objekten, und sowohl <code>JSON.parse</code> als auch <code>JSON.stringify</code> respektieren diese Reihenfolge. Wenn deine Eingabe <code>"name"</code> vor <code>"id"</code> auflistet, tut dies auch die Ausgabe. Integer-ähnliche String-Schlüssel werden jedoch von der JavaScript-Spezifikation numerisch sortiert, was bei Schlüsseln wie <code>"1"</code>, <code>"2"</code>, <code>"10"</code> relevant ist.
Warum wandelt <code>JSON.parse</code> 18446744073709551615 in 18446744073709552000 um?
JSON-Zahlen werden in JavaScript-<code>Number</code>-Werte geparst, die IEEE-754-Double-Präzisions-Gleitkommazahlen mit nur 53 Bit ganzzahliger Präzision sind. Alles oberhalb von <code>Number.MAX_SAFE_INTEGER</code> (9007199254740991) verliert niedrige Ziffern. Backends, die 64-Bit-IDs, Kryptowährungsbeträge oder Unix-Nanosekunden-Zeitstempel ausgeben, sollten diese als Strings kodieren; der Formatter überträgt den String originalgetreu.
Kann ich dieses Werkzeug für JSON5, JSONC oder NDJSON verwenden?
Nicht direkt. JSON5 erlaubt Kommentare, abschließende Kommas und nicht in Anführungszeichen gesetzte Schlüssel; JSONC ist JSON mit Kommentaren (von VS Code und TypeScript-Konfigurationen verwendet); NDJSON ist ein JSON-Dokument pro Zeile. Der Parser implementiert striktes RFC 8259, sodass alle drei Fehler werfen. Entferne Kommentare und abschließende Kommas vor dem Einfügen, oder formatiere bei NDJSON eine Zeile nach der anderen.
Was steuert der Einrückungsselektor tatsächlich?
Er setzt das dritte Argument von <code>JSON.stringify</code>, das entweder eine Zahl (wie viele Leerzeichen pro Ebene eingefügt werden) oder ein String (ein wörtliches Einrückungspräfix) ist. Das Dropdown zeigt 2 oder 4 an, da diese fast jeden Styleguide abdecken. Wenn du Tabs benötigst, kopiere die 2-Leerzeichen-Ausgabe und führe ein Suchen-Ersetzen durch; der Formatter stellt keinen benutzerdefinierten Einrückungsstring bereit, um die Benutzeroberfläche minimal zu halten.
Ist Minimieren sicher bei JSON, das einen langen String mit vielen Leerzeichen enthält?
Ja. Minimieren kollabiert nur Leerzeichen außerhalb von String-Literalen. Die Spezifikation betrachtet Leerzeichen, Tabs und Zeilenumbrüche innerhalb eines zitierten Strings als Teil des String-Werts, sodass diese Byte für Byte erhalten bleiben. Nur das Leerzeichen zwischen Token (vor Kommas, nach Doppelpunkten, um geschweifte Klammern) verschwindet.
Warum kann minimiertes JSON nach der Neukodierung geringfügig größer werden?
Weil <code>JSON.stringify</code> Escapes normalisiert. Quellcode, der <code>A</code> für den Buchstaben A verwendet, wird zu einem normalen <code>A</code>, was schrumpft. Aber rohe Unicode-Zeichen oberhalb von U+FFFF emittieren UTF-8-Bytes, die einige Transportschichten unterschiedlich zählen. Die Nettogröße fällt fast immer; pre-escaped ASCII ist der einzige Fall, der geringfügig steigen kann.
Kann ich ein einzelnes primitives Element wie eine Zahl oder einen String formatieren?
Ja. RFC 8259 betrachtet jeden JSON-Wert als gültiges Top-Level-Dokument, einschließlich <code>42</code>, <code>"hello"</code>, <code>true</code>, <code>null</code> oder <code>[]</code>. Füge <code>"just a string"</code> mit den umgebenden Anführungszeichen ein und Format wird es zuverlässig roundtrippen. Ältere Parser (vor RFC 7159) lehnten blanke Primitive ab, aber jeder moderne Browser akzeptiert sie.
Mehr Developer Tools
AI Token Counter
Count tokens for GPT-4o, Claude, and Gemini models instantly.
Open toolBase64 Encoder & Decoder
Encode UTF-8 text to Base64 online or decode Base64 back to UTF-8 and plain text. Runs in your browser with no upload.
Open toolBulk URL Encode / Decode
Encode or decode many URLs at once. Paste a newline-separated list and the tool processes each line in parallel, preserving order and blank lines.
Open toolchmod Calculator
Calculate and convert Unix file permission modes between octal and symbolic.
Open toolCode Screenshot
Create beautiful code snippet images with customizable themes.
Open toolColor Converter
Convert colors between HEX, RGB, HSL and CMYK formats.
Open tool