"Unexpected token o in JSON at position 1" — was das wirklich bedeutet

Dieser Fehler bedeutet fast nie, dass dein JSON kaputt ist. Er bedeutet, dass du JSON.parse mit etwas aufgerufen hast, das nie ein JSON-String war — und der Buchstabe in der Meldung verrät dir genau, was du übergeben hast.

Wenn du auf "Unexpected token o in JSON at position 1" starrst, ist dein JSON wahrscheinlich völlig in Ordnung. Dieser Fehler bedeutet, dass JSON.parse einen Wert erhalten hat, der bereits ein JavaScript-Objekt war und kein JSON-Text. Es ist eine der irreführendsten Fehlermeldungen in JavaScript, weil sie auf die Daten zeigt, obwohl der Fehler im Aufruf steckt.

Woher das "o" kommt

JSON.parse akzeptiert nur einen String. Übergibst du ein Objekt, wandelt JavaScript dieses Objekt still in Text um — und jedes einfache Objekt wird zum wörtlichen Text "[object Object]". Der Parser beginnt dann, diesen Text zu lesen: Position 0 ist "[", ein völlig gültiger Beginn eines JSON-Arrays, also macht er weiter. Position 1 ist "o", was weder ein gültiger Wert noch ein Schlüssel noch eine Klammer ist. Daher: unexpected token o, an Position 1. Das "o", vor dem du gewarnt wirst, ist der zweite Buchstabe des Wortes "object".

Die drei Situationen, die das auslösen

Mit Abstand am häufigsten ist doppeltes Parsen. Methoden wie res.json() von fetch oder axios parsen den Response-Body bereits für dich, sodass ein JSON.parse auf das Ergebnis etwas parst, das schon ein Objekt ist. Die zweite Ursache ist, ein Objekt direkt an JSON.parse zu übergeben, obwohl eigentlich JSON.stringify gemeint war — die beiden verwechselt man leicht, wenn es schnell gehen muss. Die dritte ist das Lesen aus einem Speicher wie localStorage, in den ein früherer Schreibvorgang ein Objekt ohne stringify abgelegt hat, sodass der gespeicherte Wert der wörtliche Text "[object Object]" ist und für immer fehlschlägt, bis du ihn löschst.

Die verwandten Fehler und was jeder Buchstabe verrät

Das in der Meldung genannte Zeichen ist eine präzise Diagnose — lies es, statt darüber hinwegzulesen. "Unexpected token <" bedeutet, dass du HTML statt JSON erhalten hast, fast immer eine 404- oder 500-Fehlerseite, eine Login-Weiterleitung oder ein Proxy-Eingriff; der eigentliche Fehler liegt dann im Request, nicht im Parsen. "Unexpected end of JSON input" bedeutet, dass der Body vollständig leer war, typisch für eine 204-Antwort oder einen Request, der scheiterte, bevor überhaupt etwas zurückkam. "Unexpected token }" deutet meist auf ein abschließendes Komma vor der schließenden Klammer hin, was JavaScript-Objektliterale erlauben, JSON aber strikt verbietet. Und "Unexpected token '" bedeutet, dass einfache Anführungszeichen für Strings verwendet wurden — wieder gültiges JavaScript, aber ungültiges JSON.

Wie du es in zehn Sekunden findest

Bevor du irgendeine Parsing-Logik änderst, gib typeof deinWert direkt vor dem JSON.parse-Aufruf aus. Steht dort "object", lösche das JSON.parse — der Wert ist bereits geparst und du warst dabei, ihn zu entparsen. Steht dort "string", öffne den Netzwerk-Tab der Browser-Devtools und sieh dir den rohen Response-Body an, nicht die hübsch formatierte Vorschau, denn die Devtools stellen eine HTML-Fehlerseite bereitwillig so dar, dass sie strukturiert aussieht. Der Rohtext sagt dir die Wahrheit auf einen Blick.

Sobald du den tatsächlichen Response-Text hast, füge ihn in unseren JSON-Formatierer ein — er validiert die Syntax und zeigt auf das exakte Zeichen, an dem die Struktur bricht, deutlich schneller als ein minifiziertes einzeiliges Payload mit bloßem Auge zu lesen. Alles läuft in deinem Browser, du kannst also gefahrlos eine echte API-Antwort einfügen.

→ JSON-Formatierer