Um ungültiges JSON zu reparieren, fügen Sie es in einen JSON-Validator ein, springen zur markierten Zeile und sehen sich das Zeichen direkt vor der gemeldeten Stelle an. In neun von zehn Fällen ist ein abschließendes Komma, einfache Anführungszeichen, ein Schlüssel ohne Anführungszeichen, ein Kommentar oder eine fehlende Klammer schuld. Meldet der Fehler Unexpected token < an Position 0, liegt das Problem gar nicht an Ihrem JSON: Sie haben eine HTML-Seite erhalten. Dieser Leitfaden geht jeden häufigen JSON-Fehler durch, erklärt, was die Meldung wirklich bedeutet, und zeigt genau, wie Sie ihn beheben.
Warum JSON so streng ist
JSON (JavaScript Object Notation) sieht aus wie JavaScript, doch seine Grammatik ist viel kleiner und strenger. Der Standard RFC 8259 erlaubt nur wenige Bausteine: Objekte in { }, Arrays in [ ], Strings in doppelten Anführungszeichen, Zahlen, true, false und null. Alles andere, auch Syntax, die JavaScript oder Python bereitwillig akzeptieren, macht das gesamte Dokument ungültig.
Diese Strenge ist ein Vorteil. Weil sich alle Parser auf dieselben wenigen Regeln einigen, lässt sich JSON aus einer Sprache zuverlässig in jeder anderen lesen. Der Nachteil: Ein einziges falsches Zeichen macht alles kaputt, und Parser stoppen meist beim ersten Problem.
Ungültiges JSON Schritt für Schritt reparieren
- Den exakten Text kopieren. Nehmen Sie die Rohdaten, keine bereits bereinigte Version. Stammt der Text aus einer API, kopieren Sie den Antwortinhalt genau so, wie er ankam.
- In den Validator einfügen. Öffnen Sie den JSON-Validator und -Formatierer, fügen Sie den Text ein und senden Sie ihn ab.
- Die gemeldete Stelle finden. Notieren Sie Zeile, Spalte oder Position aus der Fehlermeldung.
- Etwas weiter links schauen. Die gemeldete Position ist die Stelle, an der der Parser aufgegeben hat, oft ein oder zwei Zeichen nach dem eigentlichen Fehler. Ein abschließendes Komma wird zum Beispiel meist an der folgenden schließenden Klammer gemeldet.
- Einen Fehler beheben und erneut prüfen. Parser melden nur das erste Problem, wiederholen Sie also, bis die Eingabe gültig ist.
- Das Ergebnis formatieren. Ist es gültig, lässt sich mit der formatierten, eingerückten Fassung viel leichter prüfen, ob die Struktur Ihren Erwartungen entspricht.
Die 10 häufigsten JSON-Fehler und ihre Behebung
1. Abschließende Kommas
Ein Komma nach dem letzten Element eines Objekts oder Arrays ist der häufigste JSON-Fehler überhaupt, weil JavaScript-Code es erlaubt und viele Editoren es stehen lassen.
{"name": "Ada", "role": "admin",} // ungültig
{"name": "Ada", "role": "admin"} // gültig
Lösung: Löschen Sie das Komma vor der schließenden } oder ].
2. Einfache Anführungszeichen
JSON-Strings und -Schlüssel müssen doppelte Anführungszeichen verwenden. Einfache Anführungszeichen funktionieren in JavaScript und Python, aber nicht in JSON.
{'name': 'Ada'} // ungültig
{"name": "Ada"} // gültig
Lösung: Ersetzen Sie die einfachen Anführungszeichen um Schlüssel und Werte durch doppelte. Vorsicht bei Apostrophen im Text, etwa in "it's": Die sind korrekt und bleiben.
3. Schlüssel ohne Anführungszeichen
Jeder Eigenschaftsname muss ein String in Anführungszeichen sein.
{name: "Ada"} // ungültig
{"name": "Ada"} // gültig
4. Fehlende Kommas
Stehen zwei Werte ohne Komma nebeneinander, beschwert sich der Parser über den zweiten. Das passiert oft nach manuellem Bearbeiten oder beim Zusammenfügen zweier Schnipsel.
{"a": 1 "b": 2} // ungültig
{"a": 1, "b": 2} // gültig
Lösung: Setzen Sie das Komma direkt nach dem vorherigen Wert, kurz vor der Position, auf die der Fehler zeigt.
5. Kommentare
Standard-JSON kennt keine Kommentare. Sowohl // ... als auch /* ... */ sind ungültig. Manche Tools nutzen für Konfigurationsdateien gelockerte Formate (JSONC oder JSON5), die Kommentare und abschließende Kommas erlauben, doch ein strenger JSON-Parser lehnt sie ab.
Lösung: Entfernen Sie die Kommentare oder speichern Sie Notizen in einem normalen Feld wie "_comment": "...", sofern das empfangende Programm unbekannte Schlüssel ignoriert.
6. Python- oder JavaScript-Werte
JSON kennt nur kleingeschriebenes true, false und null. Pythons True, False und None sind ungültig, ebenso JavaScripts undefined, NaN und Infinity.
Lösung: Wandeln Sie sie in die JSON-Entsprechungen um und machen Sie aus Werten wie NaN ein null oder einen String. Wenn Sie ein Python-Dictionary ausgeben, nutzen Sie json.dumps() statt print() oder str(), die Python-Syntax erzeugen, kein JSON.
7. Typografische Anführungszeichen aus Dokumenten und Chat-Apps
Text aus einer Textverarbeitung, einer Präsentation oder einem Messenger enthält oft geschwungene Anführungszeichen (“ ”) statt gerader ("). Sie sehen fast gleich aus, sind aber andere Zeichen.
Lösung: Ersetzen Sie geschwungene Anführungszeichen um Schlüssel und Werte durch gerade doppelte Anführungszeichen, und kopieren Sie Code möglichst aus Nur-Text-Quellen.
8. Falsche Escapes und Zeilenumbrüche in Strings
Ein Backslash leitet eine Escape-Sequenz ein, daher bricht ein Windows-Pfad wie "C:\new\file" oder ändert unbemerkt seine Bedeutung. Auch ein echter Zeilenumbruch innerhalb eines Strings ist ungültig.
{"path": "C:\new\file"} // ungültig
{"path": "C:\\new\\file"} // gültig
{"note": "line one\nline two"} // gültig: der Zeilenumbruch ist escaped
Lösung: Verdoppeln Sie jeden wörtlichen Backslash und schreiben Sie Zeilenumbrüche als \n.
9. Fehlende oder überzählige Klammern
Ein Fehler wie Unexpected end of JSON input bedeutet meist, dass eine schließende } oder ] fehlt oder der Text mittendrin abgeschnitten wurde. Eine überzählige Klammer erzeugt gegen Ende einen Fehler wegen eines unerwarteten Tokens.
Lösung: Formatieren Sie die Teile, die sich parsen lassen, oder rücken Sie den Text von Hand ein, und zählen Sie öffnende und schließende Klammern Ebene für Ebene. Wurde die Eingabe abgeschnitten (etwa eine Logzeile mit Längenlimit), besorgen Sie das vollständige Original, statt das Ende zu raten.
10. Mehrere aneinandergeklebte JSON-Dokumente
Ein JSON-Dokument enthält genau einen Wert auf oberster Ebene. Zwei Objekte direkt hintereinander, etwa {"id":1}{"id":2}, sind als ein Dokument ungültig, ebenso eine zeilengetrennte Logdatei, in der jede Zeile ein eigenes Objekt ist.
Lösung: Packen Sie die Elemente in ein Array, [{"id":1},{"id":2}], oder parsen Sie die Datei zeilenweise, wenn sie zeilengetrennt gedacht ist.
Fehlermeldungen entschlüsseln
Verschiedene Sprachen und Browser formulieren dasselbe Problem unterschiedlich. So übersetzen Sie die Meldungen, die Ihnen am häufigsten begegnen.
Unexpected token < in JSON at position 0
Das erste Zeichen ist <, der Text ist also HTML, kein JSON. Ein Server hat statt Daten eine Fehlerseite, eine Anmeldeseite oder eine 404-Seite geliefert. Prüfen Sie vor dem Parsen den HTTP-Statuscode und den Content-Type-Header. Unser HTTP-Header-Lookup zeigt beides für jede öffentliche URL, und der URL-Weiterleitungs-Checker zeigt, ob die Anfrage woandershin umgeleitet wird, etwa auf eine Anmeldeseite.
Unexpected token u in JSON at position 0
Der an den Parser übergebene Wert war undefined, was zum Text undefined wird. Der Fehler liegt früher in Ihrem Code: Die Variable wurde nie gesetzt.
Unexpected end of JSON input
Der Parser hat das Ende erreicht, bevor die Struktur vollständig war. Suchen Sie nach einer fehlenden Klammer oder einem leeren Antwortinhalt.
Expected property name or '}' / Expecting property name enclosed in double quotes
Die erste Meldung stammt von JavaScript, die zweite vom json-Modul von Python. Beide deuten meist auf ein abschließendes Komma, einen Schlüssel in einfachen Anführungszeichen oder einen Schlüssel ohne Anführungszeichen hin.
Ein unsichtbares Zeichen an Position 0
Sieht der Text perfekt aus, scheitert aber schon am ersten Zeichen, beginnt er womöglich mit einer Byte-Order-Mark (BOM) oder einem anderen unsichtbaren Zeichen. Speichern Sie die Datei als UTF-8 ohne BOM oder entfernen Sie dieses erste Zeichen vor dem Parsen.
Praxisbeispiel: ein kaputtes Konfigurations-Snippet reparieren
Dieses Snippet hat jemand aus einer Chatnachricht eingefügt:
{
name: 'My App',
"debug": True,
// turn this off in production
"plugins": ["seo", "cache",],
"path": "C:\apps\myapp"
}
Der Validator stoppt beim ersten Fehler, dem Schlüssel ohne Anführungszeichen in Zeile 2. Eine Korrektur nach der anderen:
- Zeile 2: Schlüssel in Anführungszeichen setzen und doppelte Anführungszeichen verwenden, ergibt
"name": "My App". - Zeile 3:
Trueintrueändern. - Zeile 4: den Kommentar löschen.
- Zeile 5: das Komma nach
"cache"entfernen. - Zeile 6: die Backslashes verdoppeln, ergibt
"C:\\apps\\myapp".
Das gültige Ergebnis:
{
"name": "My App",
"debug": true,
"plugins": ["seo", "cache"],
"path": "C:\\apps\\myapp"
}
JSON über die Kommandozeile prüfen
Für große Dateien oder automatische Prüfungen validieren Sie lokal. Jeder dieser Befehle endet bei ungültiger Eingabe mit einem Fehler, Sie können sie also in Skripten nutzen:
python3 -m json.tool data.jsongibt das formatierte JSON aus oder einen Fehler mit Zeile und Spalte.jq empty data.jsonprüft die Datei und gibt nichts aus, wenn sie gültig ist (jq muss installiert sein).node -e "JSON.parse(require('fs').readFileSync('data.json','utf8'))"nutzt denselben Parser wie Node.js-Apps.
Stolperfallen
- Nicht das Symptom per Suchen und Ersetzen beheben. Wer blind alle einfachen Anführungszeichen ersetzt, zerstört auch Apostrophe im Text. Korrigieren Sie nur die Anführungszeichen um Schlüssel und Werte.
- Parse-Fehler nicht verschlucken. Code, der bei jedem Parse-Fehler ein leeres Objekt zurückgibt, versteckt echte Bugs. Protokollieren Sie stattdessen den Fehler und die ersten Zeichen der Eingabe (ohne private Daten zu protokollieren).
- Die Quelle reparieren, nicht nur die Ausgabe. Erzeugt ein System immer wieder kaputtes JSON, bauen Sie es mit einem richtigen Serializer wie
JSON.stringify()oderjson.dumps(), statt Strings zusammenzukleben. - Auf Daten in anderen Kodierungen achten. JSON in einer URL oder einem Token kommt oft kodiert an. Dekodieren Sie es zuerst mit dem URL-Decoder oder dem Base64-Decoder und validieren Sie es dann.
Passende Tools und Leitfäden
- Der JSON-Validator und -Formatierer prüft die Syntax und formatiert JSON lesbar.
- Der URL-Parser zerlegt eine API-Adresse in ihre Bestandteile, damit Sie sicher sind, den richtigen Endpunkt aufzurufen.
- Der HTML-Entity-Konverter dekodiert Text wie
", der manchmal auftaucht, wenn JSON in HTML eingebettet wurde. - DNS-Einträge prüfen hilft, wenn eine API HTML liefert, weil die Domain auf den falschen Server zeigt.
- Duplikate entfernen und Listen bereinigen ist praktisch, um Werte aufzuräumen, bevor sie in ein JSON-Array kommen.
Häufig gestellte Fragen
Warum ist mein JSON ungültig, obwohl es gut aussieht?
Die üblichen Verdächtigen sind unsichtbare oder ähnlich aussehende Zeichen: ein abschließendes Komma, geschwungene statt gerader Anführungszeichen, eine Byte-Order-Mark am Dateianfang oder ein Kommentar. Ein Validator zeigt die genaue Stelle, Sie müssen also nicht mit bloßem Auge suchen.
Sind abschließende Kommas in JSON erlaubt?
Nein. Standard-JSON erlaubt kein Komma nach dem letzten Element eines Objekts oder Arrays. Gelockerte Formate wie JSONC und JSON5 erlauben sie, strenge Parser wie JSON.parse lehnen sie aber ab.
Kann JSON Kommentare enthalten?
Nein. Standard-JSON hat keine Kommentarsyntax. Entfernen Sie Kommentare vor dem Parsen oder nutzen Sie ein normales Feld wie _comment, wenn das lesende Programm zusätzliche Schlüssel ignoriert.
Was bedeutet Unexpected token < in JSON at position 0?
Der Text beginnt mit einem Kleiner-als-Zeichen, ist also fast sicher eine HTML-Seite wie eine Fehler-, Anmelde- oder 404-Seite statt JSON. Prüfen Sie den HTTP-Statuscode, den Content-Type-Header und die angefragte URL.
Unterscheidet JSON zwischen Groß- und Kleinschreibung?
Ja. Die Literale müssen kleingeschrieben true, false und null lauten, und Schlüssel unterscheiden die Schreibweise, sodass Name und name zwei verschiedene Schlüssel sind.
Was ist der Unterschied zwischen Validieren und Formatieren von JSON?
Validieren prüft, ob der Text den JSON-Regeln folgt, und meldet den ersten Fehler. Formatieren fügt gültigem JSON Zeilenumbrüche und Einrückungen hinzu, damit Menschen es leichter lesen können. Die Daten ändern sich dabei nicht.