← Alle Artikel

Falsch escaptes Zeichen in JSON: gültige Escapes und Fixes

Ein falsch escaptes Zeichen in JSON heißt: nach einem Backslash kommt etwas, das JSON nicht erlaubt. Hier die vollständige Liste gültiger Escapes plus Fixes für \x, Pfade und \u.

SyntaxError: Bad escaped character in JSON at position N bedeutet, dass innerhalb eines Strings ein Backslash (\) steht, gefolgt von etwas, das JSON nicht als gültiges Escape erkennt. JSON erlaubt nur eine kleine, feste Menge an Escape-Sequenzen —— alles andere nach einem \ löst diesen Fehler aus. Hier die vollständige Liste und wie man ihn behebt.

Welchen String-Fehler habe ich?

Wie der Fehler aussieht

// V8 (Chrome / Node / Edge)
SyntaxError: Bad escaped character in JSON at position 14

// Firefox
SyntaxError: JSON.parse: bad escaped character at line 1 column 15 of the JSON data

// Safari
SyntaxError: JSON Parse error: Invalid escape character \x

Die einzigen Escapes, die JSON erlaubt

Innerhalb eines JSON-Strings darf auf einen Backslash genau eines von Folgendem folgen:

\"   doppeltes Anführungszeichen
\\   Backslash
\/   Schrägstrich
\b   Backspace
\f   Form Feed
\n   Newline
\r   Carriage Return
\t   Tab
\uXXXX   ein Unicode-Codepoint (exakt 4 Hex-Ziffern)

Alles andere nach einem \ —— \x, \', \a, \0, ein Windows-Pfad wie \Users oder ein verstümmeltes \u12 —— gilt als „bad escaped character“.

Warum es passiert

Ursache 1 —— Escapes aus anderen Sprachen geliehen

// ❌ \x und \' sind in JS/Python gültig, in JSON nicht
{ "code": "\x1b[0m", "name": "O\'Brien" }

// ✅ ein \u-Escape für das Byte, Apostrophe nicht escapen
{ "code": "\u001b[0m", "name": "O'Brien" }

Ursache 2 —— Windows-Dateipfade

// ❌ jeder Backslash beginnt ein ungültiges Escape
{ "path": "C:\Users\Ada\file.json" }

// ✅ jeden Backslash escapen (oder Schrägstriche verwenden)
{ "path": "C:\\Users\\Ada\\file.json" }
{ "path": "C:/Users/Ada/file.json" }

Ursache 3 —— Abgeschnittenes oder fehlerhaftes \u-Escape

// ❌ \u braucht genau 4 Hex-Ziffern
{ "char": "\u12" }

// ✅
{ "char": "\u0012" }

Surrogate-Paare und Zeichen außerhalb der BMP

Das \uXXXX-Escape von JSON ist auf 4 Hex-Ziffern festgelegt und adressiert Codepoints bis U+FFFF (Basic Multilingual Plane). Zeichen darüber —— Emojis, viele CJK-Erweiterungen, mathematische Symbole —— müssen als UTF-16-Surrogate-Paar geschrieben werden:

// 😀 (U+1F600) als Surrogate-Paar
"\uD83D\uDE00"

// nicht erlaubt —— JSON hat weder \U noch \u{...}
"\u1F600"     // ungültiges Escape (nur die ersten 4 Hex-Ziffern werden konsumiert; der Rest ist Text)
"\u{1F600}"   // ungültiges Escape

Das ist die Kodierung von JSON in UTF-16-Form, auch wenn die Datei auf der Platte UTF-8 ist. Zwei praktische Folgen:

  • UTF-8 in der Datei ist in Ordnung. Sie können "😀" wörtlich schreiben; moderne Parser handhaben das. Die Surrogate-Paar-Form ist nur nötig, wenn Sie escapen müssen.
  • Achten Sie auf einsame Surrogates. Ein \uD83D ohne passendes Low-Surrogate (oder umgekehrt) ist technisch von JSON erlaubt, aber fehlerhaftes UTF-16 —— nachgelagerte Konsumenten (besonders Postgres jsonb) lehnen es ab. JSON.stringify erzeugt nur wohlgeformte Paare.

Wie man es behebt —— Schritt für Schritt

  1. Zur gemeldeten Position springen und den \ vor einem ungültigen Zeichen finden.
  2. Verirrter Backslash? (z. B. ein Windows-Pfad) —— verdoppeln Sie ihn zu \\, oder steigen Sie auf Schrägstriche um.
  3. Fremdes Escape wie \x oder \'? —— wandeln Sie \xNN in \u00NN um und entfernen Sie den Backslash vor '.
  4. Kurzes \u? —— auf exakt vier Hex-Ziffern auffüllen.
  5. Beste Korrektur: Bauen Sie das JSON mit JSON.stringify(), das nur gültige Escapes erzeugt.
// Prävention —— korrektes Escapen ist automatisch
JSON.stringify({ path: 'C:\\Users\\Ada', code: '\x1b[0m' });
// → {"path":"C:\\Users\\Ada","code":"\u001b[0m"}

Häufig gestellte Fragen

Was bedeutet „Bad escaped character in JSON“?

Auf einen Backslash innerhalb eines Strings folgt ein Zeichen, das nicht zu den von JSON erlaubten Escapes (" \\ / b f n r t oder \uXXXX) gehört. Häufige Übeltäter sind \x, \' und nicht escapte Windows-Pfade.

Wie schreibe ich einen Windows-Pfad in JSON?

Verdoppeln Sie jeden Backslash (C:\\\\Users), damit jeder ein gültiges \\-Escape ist, oder verwenden Sie Schrägstriche (C:/Users), die JSON akzeptiert.

Ist das dasselbe wie „Bad control character“?

Nein. „Bad escaped character“ geht um eine ungültige Sequenz nach einem Backslash; „bad control character“ geht um ein rohes, nicht escaptes Steuerbyte (Tab, Newline) ohne irgendeinen Backslash.

Jetzt beheben