Gültiges und lesbares JSON

JSON ist das Format, in dem die meisten Web-APIs Daten austauschen: Objekte in geschweiften Klammern mit Schlüsseln in doppelten Anführungszeichen, Arrays in eckigen Klammern, Strings, Zahlen, true, false und null. APIs liefern es oft minifiziert in einer Zeile: Mit Einrückung formatiert wird es lesbar, minifiziert spart es Leerzeichen und Bytes.

Die Syntax ist strenger als die von JavaScript: kein Komma nach dem letzten Element, keine Kommentare, keine einfachen Anführungszeichen, Schlüssel immer in doppelten Anführungszeichen. Das sind die häufigsten Fehler beim Schreiben von Hand, und der Parser meldet sie mit genauer Position.

Die Schlüssel alphabetisch zu sortieren ändert die Bedeutung nicht, weil die Reihenfolge in einem JSON-Objekt keine Rolle spielt, macht aber den Vergleich zweier Antworten oder Konfigurationsdateien mit einem Diff viel einfacher.

Häufige Fehler

  • Ein Komma nach dem letzten Element eines Objekts oder Arrays stehen lassen: JSON akzeptiert es nicht.
  • Einfache Anführungszeichen oder Schlüssel ohne Anführungszeichen wie in JavaScript: JSON verlangt doppelte Anführungszeichen.
  • NaN, Infinity oder undefined schreiben: Das sind keine JSON-Werte; man verwendet null.

Häufige Fragen

Wird das eingefügte JSON an einen Server gesendet?

Nein: Formatierung und Prüfung geschehen im Browser mit JSON.parse. Nur kurzes JSON landet in der Adresse der Seite, damit man sie teilen kann.

Warum ändern sich sehr große Zahlen?

JSON.parse verwendet Gleitkommazahlen von JavaScript, exakt bis 2⁵³: Eine ID wie 12345678901234567890 wird gerundet. APIs mit großen IDs senden sie meist als Strings.

Was unterscheidet JSON von JSON5?

JSON5 ist eine Erweiterung, die Kommentare, abschließende Kommas und einfache Anführungszeichen erlaubt; praktisch für Konfigurationsdateien, aber kein Standard-JSON, und JSON.parse lehnt es ab.

So funktioniert diese Berechnung

Der Text wird mit JSON.parse gelesen, das die Grammatik von RFC 8259 anwendet; bei einem Fehler wird die vom Browser gemeldete Position in Zeile und Spalte umgerechnet. Das Ergebnis wird mit JSON.stringify neu geschrieben, mit 2 oder 4 Leerzeichen oder einem Tabulator pro Ebene oder ohne Leerzeichen. Beim Sortieren werden die Schlüssel jedes Objekts rekursiv nach Unicode-Codepunkt geordnet. Größen in UTF-8-Byte.