Was ist JSON? Syntax, häufige Fehler und Validierung

JSON (JavaScript Object Notation) ist ein schlankes, textbasiertes Format zum Speichern und Austauschen strukturierter Daten. Es besteht aus Objekten mit Schlüssel-Wert-Paaren, geordneten Arrays und einer Handvoll Werttypen: Strings, Zahlen, true, false und null. JSON ist das Standardformat für Web-APIs und viele Konfigurationsdateien, weil es für Menschen gut lesbar und für jede Programmiersprache einfach zu parsen ist. JSON ist streng: Schlüssel und Strings brauchen doppelte Anführungszeichen, und abschließende Kommas sowie Kommentare sind nicht erlaubt.

Das Wichtigste in Kürze
  • JSON kennt genau sechs Arten von Werten: Objekt, Array, String, Zahl, Boolean (true/false) und null.
  • Schlüssel müssen Strings in doppelten Anführungszeichen sein; einfache Anführungszeichen sind nie gültig.
  • Keine abschließenden Kommas, keine Kommentare, kein undefined, NaN oder Infinity.
  • Die meisten Fehlermeldungen zu „ungültigem JSON“ stammen von einem fehlenden oder überzähligen Komma, einem falschen Anführungszeichen oder einem nicht maskierten Zeichen in einem String.
  • Prüfen Sie zuerst die Syntax mit einem strikten Parser und bei Bedarf danach die Struktur mit JSON Schema.

So sieht JSON aus

JSON ist aus der Syntax entstanden, die JavaScript für Objektliterale verwendet, ist aber sprachunabhängig. Es ist in RFC 8259 und im Standard ECMA-404 definiert, und die einseitige Zusammenfassung auf json.org beschreibt die gesamte Grammatik. Ein typisches Dokument sieht so aus:

{
  "id": 1042,
  "name": "Ada Lovelace",
  "email": "ada@example.com",
  "active": true,
  "score": 98.5,
  "manager": null,
  "roles": ["admin", "editor"],
  "address": {
    "city": "London",
    "postcode": "N1 9GU"
  }
}

Leerraum zwischen den Elementen (Leerzeichen, Tabulatoren und Zeilenumbrüche) wird ignoriert. Dieselben Daten lassen sich daher in einer Zeile oder mit Einrückung über mehrere Zeilen schreiben. Auf oberster Ebene darf ein JSON-Dokument jeder beliebige Wert sein, auch wenn APIs fast immer ein Objekt oder ein Array verwenden.

JSON-Datentypen

TypBeispielRegeln
Objekt{"a": 1, "b": 2}Ungeordnete Menge von Schlüssel-Wert-Paaren in geschweiften Klammern. Schlüssel sind Strings; ein Doppelpunkt trennt Schlüssel und Wert; Kommas trennen die Paare.
Array[1, "two", false]Geordnete Liste von Werten in eckigen Klammern, durch Kommas getrennt. Die Werte können unterschiedliche Typen haben.
String"caf\u00e9 \"quoted\""Nur doppelte Anführungszeichen. Escape-Sequenzen mit Backslash: \" \\ \/ \b \f \n \r \t und \uXXXX. Rohe Zeilenumbrüche und Tabulatoren innerhalb von Strings sind nicht erlaubt.
Zahl-12, 3.14, 6.02e23Nur dezimal. Kein führendes +, keine führenden Nullen (07), keine Hexadezimalzahlen, kein NaN oder Infinity. Vor und nach einem Dezimalpunkt müssen Ziffern stehen.
Booleantrue, falseKleingeschrieben, ohne Anführungszeichen.
NullnullKleingeschrieben, ohne Anführungszeichen. Steht für einen leeren oder unbekannten Wert.

Einen Datumstyp gibt es nicht. Datumsangaben werden meist als Strings im ISO-8601-Format geschrieben, etwa "2026-10-13T09:30:00Z", oder als Unix-Timestamps in Zahlen; unser Unix-Timestamp-Konverter rechnet zwischen beiden um.

Zahlen und Genauigkeit

Der JSON-Standard begrenzt weder Größe noch Genauigkeit von Zahlen, wohl aber die Programme, die JSON lesen. JavaScript speichert Zahlen als 64-Bit-Gleitkommawerte, deshalb können Ganzzahlen über 9.007.199.254.740.991 (253 − 1) unbemerkt an Genauigkeit verlieren. Bei großen IDs senden viele APIs sie als Strings, zum Beispiel "id": "1234567890123456789".

Die Regeln, über die man stolpert

JSON sieht aus wie JavaScript, Python-Dictionaries und YAML, und genau deshalb schreiben Menschen versehentlich ungültiges JSON. Diese Regeln haben in Standard-JSON keine Ausnahmen:

  • Schlüssel müssen Strings in doppelten Anführungszeichen sein. {name: "Ada"} ist gültiges JavaScript, aber ungültiges JSON; schreiben Sie {"name": "Ada"}.
  • Nur doppelte Anführungszeichen. 'Ada' ist kein JSON-String.
  • Keine abschließenden Kommas. [1, 2, 3,] und {"a": 1,} sind ungültig.
  • Keine Kommentare. Weder // ... noch /* ... */ ist erlaubt.
  • Literale Werte werden kleingeschrieben. True, FALSE und None (die Schreibweise von Python) sind ungültig; verwenden Sie true, false und null.
  • Kein undefined, keine Funktionen oder Sonderzahlen. Sie existieren in JavaScript, haben aber in JSON keine Entsprechung.
  • Schlüssel sollten eindeutig sein. Der Standard sagt, dass Namen innerhalb eines Objekts eindeutig sein sollten; bei Duplikaten verhalten sich Parser unterschiedlich, und viele behalten stillschweigend nur den letzten.

Manche Werkzeuge akzeptieren gelockerte Varianten. Dateien wie die settings.json von VS Code und die tsconfig.json von TypeScript werden mit Parsern gelesen, die Kommentare erlauben (oft JSONC genannt), und JSON5 erlaubt Kommentare, einfache Anführungszeichen und abschließende Kommas. Das sind eigene Formate: Ein Standard-JSON-Parser, auch der Ihres API-Clients oder Servers, weist sie zurück.

Häufige JSON-Fehler und ihre Behebung

Die Formulierung der Fehlermeldungen unterscheidet sich zwischen den Parsern. Die Tabelle zeigt, welche Meldungen Sie vom json-Modul von Python oder vom JSON.parse eines Browsers erhalten, was sie meist bedeuten und wie Sie den Fehler beheben. Die gemeldete Position zeigt oft knapp hinter den eigentlichen Fehler; schauen Sie sich daher auch das Zeichen davor an.

ProblemTypische FehlermeldungLösung
Abschließendes Komma: {"a": 1,}„Expecting property name enclosed in double quotes“ oder „Unexpected token }“Löschen Sie das Komma nach dem letzten Element des Objekts oder Arrays.
Schlüssel ohne oder mit einfachen Anführungszeichen: {a: 1}, {'a': 1}„Expecting property name enclosed in double quotes“ oder „Expected double-quoted property name“Setzen Sie jeden Schlüssel in doppelte Anführungszeichen.
String-Wert in einfachen Anführungszeichen: {"a": 'x'}„Expecting value“ oder „Unexpected token '“Verwenden Sie doppelte Anführungszeichen und maskieren Sie doppelte Anführungszeichen im Inneren als \".
Fehlendes Komma zwischen Elementen„Expecting ',' delimiter“ oder „Expected ',' or '}' after property value“Setzen Sie in der gemeldeten Zeile ein Komma zwischen die beiden Werte oder Paare.
Kommentar in der Datei„Expecting value“ oder „Unexpected token /“Entfernen Sie den Kommentar oder verlegen Sie die Notiz in ein Datenfeld wie "_comment".
Python- oder JavaScript-Literale: True, None, undefined, NaN„Expecting value“ oder „Unexpected token“Verwenden Sie true, false oder null; serialisieren Sie Daten mit einer echten JSON-Bibliothek, statt sie einfach per print auszugeben.
Roher Zeilenumbruch oder Tabulator in einem String„Invalid control character“ oder „Bad control character in string literal“Ersetzen Sie ihn durch \n oder \t.
Nicht maskierter Backslash, etwa in einem Windows-Pfad "C:\new"„Invalid \escape“ oder „Bad escaped character“Verdoppeln Sie die Backslashes: "C:\\new".
Fehlende schließende Klammer oder fehlendes schließendes Anführungszeichen„Unterminated string“ oder „Unexpected end of JSON input“Prüfen Sie, ob jedes {, [ und " geschlossen ist; die Einrückung eines Formatters macht die Lücke deutlich.
Zwei Dokumente hintereinander oder Text nach dem Ende„Extra data“ oder „Unexpected non-whitespace character after JSON“Fassen Sie mehrere Objekte in einem Array zusammen oder verarbeiten Sie die Eingabe als JSON Lines (ein Dokument pro Zeile).
Leere Antwort oder HTML-Fehlerseite wird als JSON geparst„Expecting value: line 1 column 1“ oder „Unexpected token <“Prüfen Sie HTTP-Status und Antworttext; der Server hat etwas anderes als JSON geliefert.

Die letzte Zeile gehört in der Praxis zu den häufigsten: Code ruft JSON.parse oder response.json() auf einer Fehlerseite auf, die mit <!DOCTYPE html> beginnt, und das < wird als unerwartetes Token gemeldet.

JSON vs. YAML vs. XML

JSONYAMLXML
StrukturGeschweifte und eckige KlammernEinrückungÖffnende und schließende Tags
KommentareNeinJa (#)Ja (<!-- -->)
DatentypenString, Zahl, Boolean, Null, Objekt, ArrayÄhnlich, je nach Parser zusätzlich Datumswerte und weitere TypenAlles ist Text, sofern kein Schema Typen zuweist
Attribute und gemischter InhaltNeinNeinJa
AusführlichkeitKompaktAm kompaktesten zu lesenAm ausführlichsten
Typische EinsatzzweckeWeb-APIs, Browser-Speicher, Paketmanifeste, LogsKonfiguration: Kubernetes, Docker Compose, CI-PipelinesDokumente, SOAP, RSS und Atom, Sitemaps, Office-Dateiformate
HauptstolpersteineStrenge Anführungszeichen und KommasLeerraumempfindlich; manche Werte ohne Anführungszeichen werden unerwartet interpretiertAusführlich; Namespaces und Entities machen es komplexer

YAML 1.2 wurde so entworfen, dass JSON-Dokumente bis auf seltene Randfälle auch gültiges YAML sind, was die Umwandlung zwischen beiden einfach macht. Unser Konverter JSON ↔ YAML beherrscht beide Richtungen, der YAML-Formatter & Validator und der XML-Formatter & Validator prüfen die beiden anderen Formate, und der Konverter CSV ↔ JSON macht aus Tabellenexporten Arrays von Objekten.

Formatieren und Minifizieren

Da Leerraum keine Bedeutung hat, lässt sich dasselbe JSON für Menschen oder für Maschinen formatieren:

  • Formatiertes JSON (Pretty-Print) fügt Zeilenumbrüche und Einrückung hinzu, meist zwei oder vier Leerzeichen, sodass die Verschachtelung sichtbar wird. Verwenden Sie es für Konfigurationsdateien, Dokumentation und zum Debuggen.
  • Minifiziertes JSON entfernt jeden optionalen Leerraum, damit die Nutzdaten kleiner werden. Verwenden Sie es für Daten, die über das Netzwerk gesendet oder in großen Mengen gespeichert werden; auch die HTTP-Kompression verkleinert die Daten, deshalb ist die Ersparnis oft gering.
{"name":"Ada","roles":["admin","editor"],"active":true}

Die meisten Sprachen können beides. In JavaScript formatiert JSON.stringify(data, null, 2) mit zwei Leerzeichen Einrückung und JSON.stringify(data) minifiziert. In Python formatiert json.dumps(data, indent=2), und json.dumps(data, separators=(",", ":")) liefert die kompakteste Ausgabe.

So validieren Sie JSON

Die Validierung von JSON hat zwei Ebenen: Ist es überhaupt syntaktisch gültiges JSON, und hat es die Struktur, die Ihre Anwendung erwartet?

  1. Prüfen Sie die Syntax mit einem strikten Parser. Fügen Sie den Text in unseren JSON-Formatter & Validator ein, der Zeile und Spalte des ersten Fehlers meldet und in Ihrem Browser läuft. Auf der Kommandozeile gibt python3 -m json.tool data.json oder jq . data.json das formatierte Dokument oder einen Fehler aus.
  2. Beheben Sie Fehler einzeln. Ein Parser bricht beim ersten Problem ab; führen Sie ihn also nach jeder Korrektur erneut aus, bis er erfolgreich durchläuft.
  3. Prüfen Sie die Struktur. Stellen Sie sicher, dass Pflichtfelder vorhanden sind und die richtigen Typen haben, entweder im Code oder mit einem JSON-Schema-Validator.
  4. Prüfen Sie die Kodierung. JSON, das zwischen Systemen ausgetauscht wird, sollte UTF-8 sein. Eine in einer anderen Kodierung gespeicherte Datei kann bei nicht englischem Text seltsame Zeichen oder Fehler verursachen.

JSON Schema in Kürze

JSON Schema ist ein Vokabular, das selbst in JSON geschrieben wird und beschreibt, wie ein gültiges Dokument aussieht: welche Eigenschaften erforderlich sind, welchen Typ jede haben muss, erlaubte Werte, Stringmuster, Zahlenbereiche und so weiter. Für die meisten Sprachen gibt es Validatoren, und API-Beschreibungsformate wie OpenAPI nutzen JSON Schema, um Anfrage- und Antwortinhalte zu beschreiben. Die Spezifikation ist auf json-schema.org veröffentlicht. Ein kleines Beispiel:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": ["id", "email"],
  "properties": {
    "id": { "type": "integer", "minimum": 1 },
    "email": { "type": "string", "format": "email" },
    "roles": { "type": "array", "items": { "type": "string" } }
  }
}

Ein Dokument ohne email oder mit einer id als String wäre gültiges JSON, würde aber dieses Schema nicht bestehen. Beachten Sie, dass viele Validatoren format als Annotation behandeln und nicht durchsetzen, solange sie nicht entsprechend konfiguriert sind.

Häufig gestellte Fragen

Kann JSON Kommentare enthalten?

Nein. Standard-JSON erlaubt keinerlei Kommentare. Manche Werkzeuge akzeptieren JSONC oder JSON5, die welche erlauben, aber Dateien, die von anderen Programmen gelesen werden sollen, sollten bei reinem JSON bleiben. Wenn Sie eine Notiz brauchen, fügen Sie ein Feld wie "_comment" hinzu.

Warum erlaubt JSON keine abschließenden Kommas?

Die Grammatik wurde bewusst minimal gehalten und enthält sie schlicht nicht. Viele JavaScript-Engines und andere Sprachen akzeptieren abschließende Kommas in ihrer eigenen Syntax, weshalb sie oft versehentlich in von Hand geschriebenem JSON auftauchen.

Was ist der Unterschied zwischen JSON und einem JavaScript-Objekt?

JSON ist ein Textformat; ein JavaScript-Objekt ist eine Datenstruktur im Arbeitsspeicher. Die Syntax von JSON ist eine strengere Teilmenge der Literalsyntax von JavaScript. Mit JSON.parse und JSON.stringify wandeln Sie zwischen beiden um.

Was bedeutet „Unexpected token < in JSON at position 0“?

Der geparste Text beginnt mit <. Das bedeutet fast immer, dass Sie statt JSON HTML erhalten haben, etwa eine Fehler- oder Anmeldeseite. Prüfen Sie die Anfrage-URL, den HTTP-Statuscode und den rohen Antworttext.

Bleibt die Reihenfolge der Schlüssel in einem JSON-Objekt erhalten?

Der Standard behandelt Objekte als ungeordnet, Sie sollten sich also nicht auf die Schlüsselreihenfolge verlassen. In der Praxis behalten die meisten modernen Parser die gelesene Reihenfolge bei, aber die Reihenfolge in Arrays ist die einzige, die JSON garantiert.

Welche Dateiendung und welchen MIME-Typ verwendet JSON?

Dateien haben die Endung .json, und der Medientyp ist application/json, wie in RFC 8259 registriert.

Selbst ausprobieren

Setzen Sie diesen Leitfaden mit unseren kostenlosen Tools in die Praxis um.

Weiterlesen

In die Zwischenablage kopiert