JSON-Formatter und -Prüfer
JSON prüfen, schön formatieren oder auf eine Zeile minimieren, direkt im Browser.
Ist mein JSON gültig und wie sieht es formatiert aus?
JSON einfügen, Ausgabeformat wählen.
Beispiel: Array mit zwei Objekten, minimiert ausgegeben
So funktioniert der JSON-Formatter und -Prüfer
Der JSON-Formatter nimmt beliebigen JSON-Text, prüft ihn auf Gültigkeit und gibt ihn in der gewünschten Form zurück: formatiert mit 2 oder 4 Leerzeichen Einrückung oder mit Tabulator, oder minimiert auf eine Zeile ohne Leerzeichen für die Übertragung. Ist das JSON ungültig, nennt der Validator Zeile und Zeichen des Fehlers mit der Meldung des Parsers und den häufigsten Ursachen. Gültiges JSON wird beschrieben, Objekt oder Array, Zahl der Schlüssel, Werte gesamt, Verschachtelungstiefe, Zeichen vor und nach der Formatierung, und mit einem Klick kopiert. Alles läuft im Browser, die Daten verlassen den Rechner nicht.
Merksatz: JSON ist strenger als JavaScript, Schlüssel in doppelten Anführungszeichen, keine Kommentare, kein Komma nach dem letzten Element. Die Eselsbrücke für die sechs Typen: Objekt in geschweiften Klammern, Array in eckigen, String in doppelten Anführungszeichen, Zahl ohne führende Null, und die drei Wörter true, false und null, alles klein.
Drei Beispiele:
- {"name":"rechner24","rechner":155,"kategorien":["Geld","Gesundheit"],"live":true}: gültig, Objekt mit 4 Schlüsseln, 6 Werte, Tiefe 2, formatiert mit 2 Leerzeichen 111 statt 81 Zeichen.
- [{"id":1,"wert":2.5},{"id":2,"wert":null}]: gültig, Array mit zwei Objekten, minimiert bleibt es, wie es ist.
- {"a":1, ungültig: Zeile 1, Zeichen 7, der Parser erwartet einen Schlüssel in doppelten Anführungszeichen; das Komma nach dem letzten Element ist der Klassiker.
Die Regeln: Objekt = { "schlüssel": wert, ... }, Array = [ wert, ... ], Werte = String, Zahl, Objekt, Array, true, false, null, Dezimalpunkt, keine Kommentare, UTF-8. Für Platzhaltertext in JSON-Feldern gibt es den Lorem-Ipsum-Generator, für die Länge von Strings den Zeichenzähler.
Wissenswertes zum Thema
Was JSON ist und wo es überall steckt
JSON, JavaScript Object Notation, ist ein Textformat für strukturierte Daten, das aus zwei Bausteinen besteht: Objekten, ungeordneten Mengen von Schlüssel-Wert-Paaren in geschweiften Klammern, und Arrays, geordneten Listen in eckigen Klammern, beliebig ineinander verschachtelt, mit Strings, Zahlen, den Wahrheitswerten und null als Blättern. Es ist das Format, in dem Webseiten mit Servern reden, fast jede API antwortet mit JSON, Konfigurationsdateien von Node, VS Code und npm sind JSON, Datenbanken wie MongoDB und die JSON-Spalten von PostgreSQL und MySQL speichern es, Logdateien, Exporte, Schnittstellen zu Shops, Zahlungsdiensten, Wetterdiensten; wer eine App baut, eine Schnittstelle anbindet oder nur eine package.json ändert, trifft darauf. Die Strenge ist der Preis für die Einfachheit: Ein Parser muss nicht raten, deshalb sind Schlüssel immer Strings in doppelten Anführungszeichen, Zahlen folgen dem Dezimalpunkt ohne führende Nullen und ohne Hexadezimal, Strings kennen nur die Escape-Sequenzen \" \\ \/ \n \t \r \b \f und \uXXXX, Kommentare sind nicht vorgesehen, und das nachgestellte Komma, das JavaScript duldet, ist ein Fehler. Doppelte Schlüssel sind formal erlaubt, aber undefiniert, die meisten Parser nehmen den letzten; die Reihenfolge der Schlüssel ist nicht garantiert, auch wenn Browser sie erhalten. Die Kodierung ist UTF-8, Umlaute und Emojis dürfen direkt im String stehen. Wie lang ein JSON-Dokument in Wörtern und Zeichen ist, zählt der Wortzähler.
Die häufigsten Fehler und wie man sie findet
Der Validator nennt Zeile und Zeichen, und die Meldung des Parsers übersetzt sich fast immer in einen von sieben Fehlern: Einfache Anführungszeichen statt doppelter, 'name' statt "name", der Lieblingsfehler von Python- und JavaScript-Gewohnten; Schlüssel ohne Anführungszeichen, {name: "x"}, was in JavaScript geht und in JSON nicht; ein Komma nach dem letzten Element, [1, 2, 3,] oder {"a": 1,}; ein fehlendes Komma zwischen Elementen, das der Parser als unerwartetes Zeichen meldet; Kommentare mit // oder /* */, die manche Editoren in Konfigurationsdateien erlauben, JSON mit Kommentaren heißt dann JSONC oder JSON5 und ist etwas anderes; unmaskierte Anführungszeichen oder Zeilenumbrüche innerhalb von Strings, die als \" und \n geschrieben werden müssen; und Werte wie undefined, NaN, Infinity oder Datumsobjekte, die JavaScript kennt und JSON nicht. Dazu kommen die unsichtbaren Fehler: ein Byte-Order-Mark am Dateianfang, geschweifte Anführungszeichen aus Word, ein abgeschnittenes Dokument, dem die schließende Klammer fehlt, und zwei JSON-Dokumente hintereinander, die nur als JSON Lines mit einem Dokument je Zeile gültig wären. Der Rechner zeigt die Position, und die Suche beginnt kurz davor: Der Parser merkt den Fehler meist erst ein Zeichen nach der Ursache, bei {"a":1, am siebten Zeichen, wo er einen Schlüssel erwartet und das Ende findet. Große Dateien formatiert man mit Werkzeugen wie jq auf der Kommandozeile, im Browser gehen einige Megabyte. Für sichere Zufallswerte in Testdaten hilft der Passwort-Generator.
Formatieren oder minimieren: Wann was
Formatiertes JSON mit Einrückung ist für Menschen: Konfigurationsdateien, Beispiele in Dokumentation, Fehlersuche in API-Antworten, Code-Reviews, bei denen Zeilen verglichen werden; 2 Leerzeichen sind der Standard in der JavaScript-Welt und bei npm, 4 Leerzeichen in Python und Java-Projekten, Tabulator in manchen Editoren, und die Wahl ist Geschmack, solange sie im Projekt einheitlich ist. Minimiertes JSON ist für Maschinen: Es spart 20 bis 40 Prozent Bytes bei der Übertragung, was bei einer API mit Millionen Anfragen zählt, obwohl gzip den Unterschied fast aufhebt, und es ist das Format, in dem Server antworten und Datenbanken speichern. In JavaScript macht JSON.stringify(obj, null, 2) die Einrückung und JSON.stringify(obj) die Minimierung, in Python json.dumps(obj, indent=2) und json.dumps(obj, separators=(',', ':')), auf der Kommandozeile jq . datei.json und jq -c . datei.json, in PHP json_encode mit JSON_PRETTY_PRINT. Sortierte Schlüssel helfen beim Vergleichen, Python mit sort_keys=True, jq mit -S, der Rechner erhält die Reihenfolge. Beim Formatieren ändert sich nichts am Inhalt, Zahlen bleiben Zahlen, 2.5 bleibt 2.5 und 1e3 wird je nach Parser zu 1000, Strings bleiben Strings, und Unicode-Escapes wie ä werden von den meisten Formatierern zu ä aufgelöst, was gültig und gleichwertig ist. Wer JSON in eine URL oder einen QR-Code packt, minimiert und kodiert; den QR-Code dazu erzeugt der QR-Code-Generator.
Ein Stück Geschichte: Ein Format, das niemand erfunden haben will
Douglas Crockford fand JSON 2001, als er mit seiner Firma State Software Daten zwischen Browser und Server schicken wollte und XML zu schwer war: Er nahm die Objektschreibweise aus JavaScript, die Brendan Eich 1995 in Netscapes Sprache gebaut hatte, und erklärte sie zum Datenformat; "Ich habe es nicht erfunden, ich habe es entdeckt", sagte er, weil die Syntax schon da war, und das erste JSON-Objekt wurde im April 2001 über ein Hidden Frame verschickt. Er registrierte json.org 2002, schrieb die Grammatik auf eine Seite und setzte sie als Visitenkarte um, weigerte sich, Kommentare aufzunehmen, weil Leute Parserdirektiven hineinschreiben würden; groß wurde das Format ab 2005 mit Ajax: Google Maps und Gmail holten Daten im Hintergrund, und XML war zu langsam zu parsen, JSON ging mit eval in einer Zeile. 2006 wurde es als RFC 4627 beschrieben, 2013 als ECMA-404 und 2017 als RFC 8259 standardisiert, mit UTF-8 als Pflicht. Die Lizenz von Crockfords Referenzimplementierung enthält den Satz "The Software shall be used for Good, not Evil", der IBM einmal eine Ausnahmegenehmigung abverlangte. Heute antworten über 90 Prozent aller Web-APIs mit JSON, und JSON.parse ist in jedem Browser eine der schnellsten Funktionen überhaupt. Der Rechner nutzt genau diese Funktion, mit der Fehlermeldung des Browsers.
Praktische Tipps
Fügen Sie das JSON direkt aus der Quelle ein, nicht aus Word oder Mail, dort verbiegen sich Anführungszeichen. Lesen Sie die Fehlerposition und schauen Sie ein bis zwei Zeichen davor. Prüfen Sie zuerst Anführungszeichen, dann Kommas, dann Klammern. Entfernen Sie Kommentare, bevor Sie prüfen, oder nutzen Sie JSONC bewusst. Formatieren Sie mit 2 Leerzeichen für die Pflege und minimieren Sie für die Übertragung. Vergleichen Sie zwei Dokumente formatiert und mit sortierten Schlüsseln. Speichern Sie als UTF-8 ohne BOM. Und legen Sie keine Passwörter oder Tokens in JSON, das Sie irgendwo einfügen, auch nicht hier, obwohl der Rechner nichts sendet. Zum Zählen der Zeichen in einem Wert gibt es den Zeichenzähler.
Häufige Fragen
Wie prüfe ich, ob mein JSON gültig ist?
Einfügen und ansehen: Der Rechner meldet "Gültig" mit Objekt- oder Array-Typ, Zahl der Schlüssel, Werte und Verschachtelungstiefe, oder "Ungültig" mit Zeile und Zeichen. {"a":1, ist ungültig in Zeile 1 bei Zeichen 7, weil nach dem Komma ein Schlüssel in doppelten Anführungszeichen erwartet wird.
Was sind die häufigsten JSON-Fehler?
Einfache statt doppelte Anführungszeichen, Schlüssel ohne Anführungszeichen, ein Komma nach dem letzten Element, ein fehlendes Komma zwischen Elementen, Kommentare, Zeilenumbrüche in Strings ohne \n und Werte wie undefined oder NaN, die JSON nicht kennt. Fast immer liegt die Ursache ein Zeichen vor der gemeldeten Position.
Darf JSON Kommentare enthalten?
Nein, die Spezifikation sieht keine vor, und ein strenger Parser meldet einen Fehler. Konfigurationsdateien mit Kommentaren sind JSONC oder JSON5, die manche Editoren wie VS Code akzeptieren. Vor dem Prüfen die Kommentare entfernen oder das Format bewusst als JSONC behandeln.
Was ist der Unterschied zwischen formatiertem und minimiertem JSON?
Der Inhalt ist identisch, nur Leerzeichen und Zeilenumbrüche unterscheiden sich. Formatiert mit Einrückung liest sich für Menschen, minimiert auf einer Zeile spart 20 bis 40 Prozent Bytes bei der Übertragung. Das Beispielobjekt hat minimiert 81 und mit 2 Leerzeichen 111 Zeichen.
Welche Einrückung soll ich wählen, 2 oder 4 Leerzeichen?
2 Leerzeichen sind Standard in JavaScript, Node und npm, 4 in Python und Java, Tabulator in manchen Teams. Technisch ist alles gleich gültig; wichtig ist nur, dass ein Projekt einheitlich bleibt. Für Dokumentation sind 2 Leerzeichen am kompaktesten.
Werden meine Daten hochgeladen?
Nein, die Prüfung und Formatierung laufen vollständig im Browser mit der eingebauten JSON-Funktion, es wird nichts an einen Server gesendet. Trotzdem gilt: Passwörter, Tokens und Kundendaten gehören in kein Werkzeug, das man nicht selbst kontrolliert.
Was bedeutet die Verschachtelungstiefe?
Wie viele Ebenen von Objekten und Arrays ineinanderliegen. {"a":{"b":[1]}} hat Tiefe 3. Das Beispiel mit dem Array "kategorien" im Objekt hat Tiefe 2. Sehr tiefe Strukturen über 20 Ebenen sind meist ein Zeichen für ein ungünstiges Datenmodell.
Wie formatiere ich JSON in JavaScript, Python oder auf der Kommandozeile?
JavaScript: JSON.stringify(obj, null, 2) formatiert, JSON.stringify(obj) minimiert. Python: json.dumps(obj, indent=2) und json.dumps(obj, separators=(",", ":")). Kommandozeile: jq . datei.json formatiert, jq -c . minimiert, jq -S . sortiert die Schlüssel. PHP: json_encode mit JSON_PRETTY_PRINT.