JSON ist streng, und zwar auf eine Art, die kleinlich wirkt, bis man die Regeln kennt. Keine abschließenden Kommas. Nur doppelte Anführungszeichen. Keine Kommentare. Schlüssel müssen in Anführungszeichen stehen. Verstößt man irgendwo gegen eine dieser Regeln, wird das ganze Dokument abgelehnt, mit einer Meldung, die auf eine Zeichenposition zeigt und selten sagt, was falsch ist.
Diese Seite ordnet die Fehlermeldungen ihren Ursachen zu und die Ursachen den passenden Lösungen.
Die schnelle Antwort
- Position finden. Jeder Parser meldet Zeile und Spalte oder einen Zeichen-Offset. Geh dorthin; der Fehler liegt an dieser Stelle oder kurz davor.
- Auf die üblichen fünf achten: ein abschließendes Komma, einfache Anführungszeichen, ein Schlüssel ohne Anführungszeichen, ein Kommentar oder ein fehlendes Komma zwischen zwei Einträgen.
- Wenn der Fehler bei Position 0 oder in Zeile 1, Spalte 1 liegt, liegt das Problem nicht im JSON. Du hast etwas anderes erhalten: eine HTML-Fehlerseite, eine leere Antwort oder eine Byte-Order-Mark (BOM).
So bekommst du auf jedem Rechner eine genaue Fehlerposition:
python3 -m json.tool broken.json
jq . broken.json
Die Fehlermeldung lesen
Derselbe Fehler sieht in jeder Sprache anders aus. Suche deine Meldung, dann die Ursache:
| Meldung (gekürzt) | Wo sie auftritt | Übliche Ursache |
|---|---|---|
Unexpected token '<', "<!DOCTYPE"... is not valid JSON | JavaScript | Du hast eine HTML-Seite statt JSON erhalten. Siehe unten |
Unexpected end of JSON input | JavaScript | Leere Antwort oder abgeschnittene Datei |
Expected double-quoted property name | JavaScript | Abschließendes Komma vor } oder ein Schlüssel ohne oder mit einfachen Anführungszeichen |
Unexpected non-whitespace character after JSON | JavaScript | Zwei Dokumente direkt hintereinander oder Zeichen nach der schließenden Klammer |
Bad control character in string literal | JavaScript | Ein echter Tabulator oder Zeilenumbruch in einem String |
Expecting value: line 1 column 1 (char 0) | Python | Leere Eingabe oder gar kein JSON |
Expecting property name enclosed in double quotes | Python | Abschließendes Komma, einfache Anführungszeichen oder Schlüssel ohne Anführungszeichen |
Expecting ',' delimiter | Python | Ein fehlendes Komma zwischen zwei Einträgen oder Membern |
Extra data | Python | Mehr als ein Dokument in der Datei (oft NDJSON) |
Invalid control character | Python | Ein echter Tabulator oder Zeilenumbruch in einem String |
Unexpected UTF-8 BOM | Python | Unsichtbare Byte-Order-Mark am Dateianfang |
Die Ursachen im Einzelnen
Abschließendes Komma
{ "name": "Ada", "role": "admin", }
In JavaScript-Code erlaubt, in JSON verboten. Der Parser erreicht }, obwohl er einen weiteren Schlüssel erwartet. Lösche das letzte Komma. Typische Quellen sind von Hand bearbeitete Konfigurationsdateien und Code, der JSON per String-Verkettung zusammensetzt.
Einfache Anführungszeichen
{ 'name': 'Ada' }
JSON-Strings verwenden immer doppelte Anführungszeichen. Meist kommt das von einem Python-dict, das mit print() statt mit json.dumps() ausgegeben wurde. Die eigentliche Lösung liegt im Code, der es erzeugt hat: Serialisiere mit einer JSON-Bibliothek, nicht mit String-Formatierung.
Schlüssel ohne Anführungszeichen
{ name: "Ada" }
Gültiges JavaScript, ungültiges JSON. Setze jeden Schlüssel in Anführungszeichen.
Kommentare
{ "port": 8080 // default }
JSON kennt keine Kommentare. Aber Vorsicht, bevor du das „reparieren“: Manche Dateien sollen welche enthalten. tsconfig.json, die settings.json von VS Code und viele andere Konfigurationsdateien sind JSONC (JSON mit Kommentaren) oder JSON5, und die Tools, die sie lesen, akzeptieren Kommentare. Ist deine Datei eine davon, liegt das Problem beim strengen Parser, dem du sie übergibst, nicht bei der Datei.
Ein fehlendes Komma
{ "a": 1 "b": 2 }
Der Parser meldet den Fehler bei "b", also nach der eigentlichen Stelle. Wenn ein Fehler auf einen völlig korrekten Schlüssel zeigt, schau an das Ende der Zeile davor.
Werte, die JSON nicht kennt
NaN, Infinity, undefined und Zahlen mit führenden Nullen wie 007 sind alle ungültig. Ebenso eine Hexadezimalzahl wie 0xFF. Nimm null, einen String oder eine normale Dezimalzahl, je nachdem, was der Empfänger erwartet.
Echte Zeilenumbrüche und Tabulatoren in einem String
Ein String muss Zeilenumbrüche als \n und Tabulatoren als \t maskieren. Ein echter Zeilenumbruch zwischen den Anführungszeichen ist ungültig. Das passiert oft, wenn ein mehrzeiliger Wert von Hand in eine JSON-Datei eingefügt wird.
Backslashes
Ein Windows-Pfad wie "C:\new\folder" bricht, weil \n und \f Escape-Sequenzen sind. Verdopple jeden Backslash, "C:\\new\\folder", oder verwende Schrägstriche.
Typografische Anführungszeichen
“name” sieht aus wie ein String, ist aber keiner: Das sind typografische Anführungszeichen, nicht ". Sie stammen aus kopiertem JSON aus einem Dokument, einer Chat-App oder einer Folie, oder vom Tippen auf iPhone oder iPad, wo die intelligente Zeichensetzung gerade Anführungszeichen beim Tippen ersetzt. Schalte sie unter Einstellungen → Allgemein → Tastatur aus, bevor du unter iOS JSON bearbeitest.
Fehler bei „Position 0“: Es ist kein JSON
Liegt der Fehler beim allerersten Zeichen, ist der Inhalt falsch, nicht die Syntax.
<bei Position 0 bedeutet, dass du HTML geparst hast. Der Server hat eine Fehlerseite, eine Login-Seite oder eine 404 geliefert, und dein Code hat versucht, sie als JSON zu lesen. Protokolliere vor dem Parsen die rohe Antwort und den Statuscode.- Leere Eingabe bedeutet, dass die Antwort keinen Body hatte, oft bei einem
204 No Contentoder einer Anfrage, die scheiterte, bevor der Server antwortete. - Ein unsichtbares Zeichen am Anfang ist meist eine UTF-8-Byte-Order-Mark, die ein Windows-Editor hinzugefügt hat. In Python öffnest du die Datei mit
encoding="utf-8-sig"; anderswo speicherst du sie als UTF-8 ohne BOM neu.
NDJSON ist kein kaputtes JSON
Eine Datei mit einem JSON-Objekt pro Zeile (.jsonl, .ndjson oder Log-Ausgabe) scheitert mit „Extra data“ oder „Unexpected non-whitespace“ am Anfang von Zeile zwei. Jede Zeile ist für sich gültig. Parse zeilenweise oder nimm ein Tool, das das Format versteht: jq -c . file.jsonl liest jede Zeile.
Automatisch reparieren
Bei den häufigen Patzern (abschließende Kommas, einfache Anführungszeichen, Schlüssel ohne Anführungszeichen, Kommentare) ist automatische Reparatur sicher, weil es nur eine sinnvolle Bedeutung gibt. Diese Tools erledigen das:
jsonrepair, eine JavaScript-Bibliothek und ein Kommandozeilen-Tool.- Die meisten Code-Editoren, über eine JSON5- oder „Fix JSON“-Erweiterung.
- Eine JSON-Editor-App, die schon beim Tippen prüft.
Automatische Reparatur ist bei einer abgeschnittenen Datei nicht sicher. Ein Reparatur-Tool schließt die offenen Klammern und liefert ein gültiges Dokument, dem Daten fehlen. Rufe sie stattdessen erneut ab oder exportiere sie neu.
Auf iPhone und iPad zeigt Smart Json den Fehler in verständlichen Worten mit Zeile und Spalte an. Go setzt den Cursor dorthin, und Fix repariert Kommentare, abschließende Kommas, einfache Anführungszeichen und Schlüssel ohne Anführungszeichen mit einem Tipp.

Benennt einen JSON-Fehler in klaren Worten mit Zeile und Spalte, springt dorthin und repariert Kommentare, abschließende Kommas, einfache Anführungszeichen und Schlüssel ohne Anführungszeichen mit einem Tipp.
Was es kannDamit es gar nicht erst kaputtgeht
Fast jede ungültige JSON-Datei wurde von Hand geschrieben oder per String-Verkettung zusammengesetzt. Erzeuge JSON mit einem Serialisierer (json.dumps, JSON.stringify, JSONEncoder) und prüfe von Hand bearbeitete Dateien, bevor du sie committest. Ein Pre-Commit-Hook mit jq . file.json > /dev/null fängt alles oben Genannte ab, bevor es jemand anderes sieht.