SyntaxError: Unterminated string in JSON at position N bedeutet, dass der Parser begonnen hat, einen String zu lesen (ein öffnendes " gesehen) und das Eingabeende —— oder einen Zeilenumbruch —— erreicht hat, bevor er das schließende " gefunden hat. Der String wurde nie geschlossen. Hier sind die Ursachen und wie man es behebt.
Welchen String-Fehler habe ich?
- Unterminated string —— ein String wurde mit
"geöffnet, aber nie geschlossen. - Bad control character —— ein rohes Tab/Newline/Null-Byte steht innerhalb eines Strings ohne Escape.
- Bad escaped character —— auf einen
\folgt etwas, das JSON nicht erlaubt (z. B.\x, Windows-Pfade).
Wie der Fehler aussieht
// V8 (Chrome / Node / Edge)
SyntaxError: Unterminated string in JSON at position 27
// Firefox
SyntaxError: JSON.parse: unterminated string at line 2 column 10 of the JSON data
// Safari
SyntaxError: JSON Parse error: Unterminated stringDie Position zeigt auf (oder direkt nach) das öffnende Anführungszeichen des nie geschlossenen Strings —— arbeiten Sie von dort nach vorne.
Warum es passiert
Ursache 1 —— Ein nicht escaptes Anführungszeichen schließt den String zu früh
Ein wörtliches " im Wert schließt den String vorzeitig; der Rest der Zeile wird als unerwartete Tokens gelesen, und der eigentliche String bleibt „offen“.
// ❌ kaputt —— das Anführungszeichen vor hello schließt "He said "
{ "note": "He said "hello" to her" }
// ✅ behoben —— innere Anführungszeichen mit Backslash escapen
{ "note": "He said \"hello\" to her" }Ursache 2 —— Ein roher Zeilenumbruch im String
JSON-Strings dürfen keine rohen Zeilenumbrüche enthalten. Ein wörtlicher Umbruch beendet den String und lässt ihn ungeschlossen.
// ❌ kaputt —— echter Zeilenumbruch im String
{ "bio": "line one
line two" }
// ✅ behoben —— \n-Escape verwenden, kein roher Umbruch
{ "bio": "line one\nline two" }Ursache 3 —— Abgeschnittene Daten
Eine Antwort, die mitten im String abbricht (Verbindungsabbruch, Buffer-/Größenlimit, partielles Lesen), lässt am Ende der Eingabe einen offenen String zurück.
// was angekommen ist (Verbindung abgebrochen):
{"user":{"name":"Ada Lovel
// → Unterminated stringWie man es behebt —— Schritt für Schritt
- Springen Sie zur gemeldeten Position und finden Sie das öffnende
"ohne passendes schließendes. - Suchen Sie ein nicht escaptes
"im Wert —— escapen Sie es zu\". - Suchen Sie einen rohen Zeilenumbruch/Tab im Wert —— ersetzen Sie ihn durch
\n/\t. - Prüfen Sie auf Abschneiden —— vergleichen Sie die Bytelänge mit
Content-Length; wenn kürzer, wurden die Daten abgeschnitten (Code-Fix, kein Text-Fix). - Hören Sie auf, JSON von Hand zu bauen. Verwenden Sie
JSON.stringify(), das Anführungszeichen und Steuerzeichen für Sie escaped.
// Prävention: niemals Strings zu JSON konkatenieren
const json = JSON.stringify({ note: userInput }); // immer gültigHäufig gestellte Fragen
Was verursacht „Unterminated string in JSON“?
Ein öffnendes " ohne passendes schließendes " —— meist ein nicht escaptes Anführungszeichen im Wert, ein roher Zeilenumbruch oder eine Antwort, die mitten im String abgeschnitten wurde.
Wie binde ich ein Anführungszeichen oder einen Zeilenumbruch in einen JSON-String ein?
Escapen Sie sie: \" für doppeltes Anführungszeichen, \n für Newline, \t für Tab. Wenn Sie das JSON mit JSON.stringify() bauen, geschieht das automatisch.
Ist das dasselbe wie „Unexpected end of JSON input“?
Verwandt, aber unterschiedlich. „Unterminated string“ heißt, dass ein String offen ist; „Unexpected end of JSON input“ heißt, dass die ganze Struktur (Objekt/Array) vorzeitig zu Ende ging. Abgeschnittene Antworten können beide auslösen.
Jetzt beheben
- JSON Fix —— den nicht abgeschlossenen String im Browser finden und reparieren
- Unexpected End of JSON Input —— wenn die ganze Struktur abgeschnitten ist
- Bad Control Character im String-Literal in JSON —— rohe Tabs/Newlines in Strings
- Bad Escaped Character in JSON —— ungültige Backslash-Escapes