Bad escaped character: neplatná escape sekvence v JSON

Po zpětném lomítku v řetězci JSON následuje znak, který netvoří povolenou escape sekvenci, nebo je zápis \uXXXX neúplný. V8 v Node.js a Chromu hlásí Bad escaped character in JSON, Python Invalid \escape. Nejčastější příčinou je cesta ve Windows s jedním zpětným lomítkem.

Autor: Aktualizováno

Znění hlášky v jednotlivých prostředích

Parser Hláška Kdy
Node.js 25, Chrome 153 (V8) JSON.parse, response.json(), Edge a další prohlížeče s V8 Bad escaped character in JSON at position 13 (line 1 column 14) Cesta ve Windows s jedním zpětným lomítkem
Bad Unicode escape in JSON at position 13 (line 1 column 14) Neúplný zápis \uXXXX
Firefox 158 JSON.parse, response.json() JSON.parse: bad escaped character at line 1 column 14 of the JSON data Cesta ve Windows s jedním zpětným lomítkem
JSON.parse: bad Unicode escape at line 1 column 14 of the JSON data Neúplný zápis \uXXXX
Safari (WebKit 26) JSON.parse, response.json() JSON Parse error: Invalid escape character d Cesta ve Windows s jedním zpětným lomítkem
JSON Parse error: "\u12"}" is not a valid unicode escape Neúplný zápis \uXXXX
Python 3.14 json.loads, json.load (json.JSONDecodeError) Invalid \escape: line 1 column 13 (char 12) Cesta ve Windows s jedním zpětným lomítkem
Invalid \uXXXX escape: line 1 column 11 (char 10) Neúplný zápis \uXXXX
.NET 10 (System.Text.Json) JsonDocument.Parse, JsonSerializer.Deserialize 'd' is an invalid escapable character within a JSON string. The string should be correctly escaped. Cesta ve Windows s jedním zpětným lomítkem
'"' is not a hex digit following '\u' within a JSON string. The string should be correctly escaped. Neúplný zápis \uXXXX
PHP 8.4 json_last_error_msg(), JsonException s JSON_THROW_ON_ERROR Syntax error Cesta ve Windows s jedním zpětným lomítkem, Neúplný zápis \uXXXX

JSON povoluje jen \", \\, \/, \b, \f, \n, \r, \t a \uXXXX se čtyřmi šestnáctkovými číslicemi (RFC 8259, oddíl 7). Zápisy \x41, \d nebo \' z jiných jazyků nejsou platné.

Příčiny a opravy

Cesta ve Windows s jedním zpětným lomítkem

Chybně
{"cesta":"C:\data"}
Opraveno
{"cesta":"C:\\data"}

\d není escape sekvence. Samotné zpětné lomítko se v JSON zapisuje jako \\. Ve Windows lze často použít i obyčejné lomítko (C:/data), pokud ho cílový program přijímá.

Neúplný zápis \uXXXX

Chybně
{"znak":"\u12"}
Opraveno
{"znak":"\u0012"}

\u musí následovat přesně čtyři šestnáctkové číslice. Znak mimo základní rovinu (třeba emoji) se zapisuje dvojicí \uD83D\uDE00. Podrobnosti jsou v řetězcích v JSON.

Jak chybu opravit

Rozlišuj JSON text a řetězec zdrojového jazyka. V JavaScript literálu může být nutná další vrstva escapování. Nech ji vytvořit JSON.stringify nebo obdobný serializátor.

Co zkontrolovat po opravě

Po načtení opraveného JSON má hodnota obsahovat cestu C:\data s jedním zpětným lomítkem. Dvě lomítka jsou způsob zápisu v JSON textu, nikoli dva znaky výsledné cesty. Platné sekvence mohou být také nechtěné: například zpětné lomítko následované t vytvoří tabulátor. Parser tedy může přijmout text, který představuje jinou cestu, než jsi zamýšlel.

Po kontrole syntaxe proto porovnej i načtenou hodnotu. Pokud JSON vzniká v programu, vytvoř jej z původního řetězce pomocí knihovny. Zvláštní znaky a jednotlivé vrstvy zápisu vysvětluje kapitola Řetězce v JSON, přehled sekvencí je v referenci escape sekvencí.