Zum Hauptinhalt springen

← Zurück zum Blog

Häufige JSON-Fehler und wie man sie behebt

Fast jeder „Unexpected token in JSON”-Fehler stammt aus derselben kurzen Liste von Fehlern. Hier sind sie, mit dem jeweiligen Fix. (Neu beim Format? Beginne mit Was ist JSON.)

Das sind die Meldungen, die unser Werkzeug tatsächlich ausgibt. Wir haben sechs kaputte Schnipsel in den JSON-Formatierer gegeben und wortgetreu festgehalten, was zurückkam — so kannst du die Meldung vor dir zuordnen:

  • {"a":1,} → Expected double-quoted property name in JSON at position 7 (line 1 column 8)
  • {'a':1} und {a:1} → Expected property name or ’}’ in JSON at position 1 (line 1 column 2)
  • {"a":{"b":1} → Expected ’,’ or ’}’ after property value in JSON at position 12 (line 1 column 13)
  • {"a":undefined} → Unexpected token ‘u’, ”{“a”:undefined}” is not valid JSON
  • {"a":1 "b":2} → Expected ’,’ or ’}’ after property value in JSON at position 7

Zwei Dinge sind wissenswert. Einfach gequotete Strings und unquotierte Schlüssel erzeugen die gleiche Meldung, weil der Parser in beiden Fällen an derselben Stelle aufgibt. Und der Wortlaut stammt vom JSON-Parser des Browsers selbst — Firefox und Safari formulieren anders. Verlässlich ist die Positionsangabe. Zeile und Spalte ergänzt unser Werkzeug.

1. Nachgestellte Kommas

JSON erlaubt kein Komma nach dem letzten Element:

{ "a": 1, "b": 2, }   ← ungültig
{ "a": 1, "b": 2 }    ← gültig

2. Einfache Anführungszeichen

Strings und Schlüssel müssen doppelte Anführungszeichen nutzen:

{ 'name': 'Ann' }   ← ungültig
{ "name": "Ann" }   ← gültig

3. Unquotierte Schlüssel

Anders als bei JavaScript-Objekten müssen JSON-Schlüssel quotiert sein:

{ name: "Ann" }     ← ungültig
{ "name": "Ann" }   ← gültig

4. Kommentare

JSON hat keine Kommentare. Entferne // und /* */ vor dem Parsen.

5. Falsche oder fehlende Klammern

Jedes { braucht ein } und jedes [ ein ]. Häufig werden sie verwechselt oder mehrere Datensätze nicht in ein Array [ … ] gepackt.

Eine fehlende Klammer ist der Fehler, dessen gemeldete Position am weitesten vom Fehler entfernt liegt. {"a":{"b":1} — eine schließende Klammer zu wenig — ergibt

✗ JSON syntax error: Expected ',' or '}' after property value in JSON at position 12 (line 1 column 13) [L1:13]

Position 12 ist das Ende der Eingabe, denn der Parser merkt erst dann, dass etwas fehlt, wenn keine Zeichen mehr da sind. Der Fehler sitzt links an der öffnenden {; die Meldung rechts. Vergleiche ein fehlendes Komma, {"a":1 "b":2}:

✗ JSON syntax error: Expected ',' or '}' after property value in JSON at position 7 (line 1 column 8) [L1:8]

Dieselbe Meldung, aber Position 7 landet genau dort, wo das Komma hingehört. Wenn die gemeldete Spalte das letzte Zeichen der Datei ist, suche eine nicht geschlossene Klammer statt die angegebene Zeile zu lesen.

6. Keine-Zahl-Werte

NaN, Infinity und undefined sind kein gültiges JSON. Nutze eine Zahl, einen String oder null.

Nicht-Zahlen-Werte scheitern noch einmal anders, und die Meldung sagt es. {"a":undefined} ergibt

✗ JSON syntax error: Unexpected token 'u', "{"a":undefined}" is not valid JSON

Beachte, dass der Parser die ganze Eingabe zitiert statt eine Spalte zu nennen: Er konnte undefined nicht einmal ansatzweise als Wert deuten, es gibt also keine Position, an der ein gültiges Token schiefging. NaN und Infinity scheitern genauso. JSON hat genau eine Art, „kein Wert” zu sagen, und das ist null.

Der schnellste Fix: validieren

Statt mit dem Auge zu suchen, füge dein JSON in einen Validator ein, der die genaue Fehlerstelle zeigt:

Behebe die sechs Fehler oben, und die allermeisten „ungültiges JSON”-Probleme verschwinden — alles läuft lokal im Browser, sodass selbst sensible Daten privat bleiben.

Ein echtes Beispiel, vorher und nachher

Diese Nutzlast stolpert gleich über drei der obigen Fehler auf einmal:

{
  'user': "Ann",
  "roles": ["admin", "editor",],
  "active": True,
}

Ein Parser hält beim ersten Problem an, das er findet, und meldet etwas Knappes wie Unexpected token ' at position 4 — obwohl es drei getrennte Fehler sind. Behebe sie zusammen: einfache durch doppelte Anführungszeichen ersetzen, die beiden nachgestellten Kommas entfernen und den Boolean kleinschreiben:

{
  "user": "Ann",
  "roles": ["admin", "editor"],
  "active": true
}

Achte auf True, False und None: Das sind Python-Schreibweisen. JSON kennt nur die Kleinbuchstaben true, false und null.

JSON ist kein JavaScript-Objekt

Die meisten dieser Fehler entstehen, weil man JSON wie JavaScript-Quellcode behandelt. Das ist es nicht — JSON ist ein Text-Format mit strengerer Grammatik:

  • Schlüssel sind immer quotierte Strings, nie nackte Bezeichner;
  • erlaubt sind nur gerade doppelte Anführungszeichen — keine einfachen, keine Backticks und keine typografischen „Smart Quotes”, die ein Textprogramm einfügt;
  • keine nachgestellten Kommas, Kommentare oder Funktionsaufrufe;
  • Zahlen dürfen kein führendes +, keine führende Null und keinen bloßen abschließenden Punkt haben.

Erzeuge JSON nach Möglichkeit mit einem echten Serialisierer — JSON.stringify in JavaScript, json.dumps in Python — statt Strings von Hand zusammenzukleben. Der bekommt Quoting und Escaping jedes Mal richtig hin.

FAQ

Warum sagt der Fehler „position 0”?

Die Eingabe ist leer, beginnt mit einem Byte Order Mark (BOM) oder ist in Wahrheit eine HTML-Fehlerseite statt JSON. Prüfe, was deine API wirklich zurückgegeben hat, bevor du die Syntax verdächtigst.

Kann ich Kommentare in einer Konfigurationsdatei behalten?

In reinem JSON nicht. Nutze beim Bearbeiten JSON5 oder JSONC, oder wechsle zu YAML, und entferne alles Nicht-Standardisierte, bevor ein strikter Parser es sieht.

Die Datei ist riesig und lässt sich nicht öffnen — was nun?

Formatiere sie zuerst, damit die Verschachtelung sichtbar wird, und klappe dann die Zweige zu, die du nicht brauchst. Im JSON-Formatter geht beides in einem Schritt.