Bad escaped character in JSON at position N (line L column C)
O JSON permite exatamente nove sequências de escape: \" \\ \/ \b \f \n \r \t e \uXXXX. Qualquer outra coisa depois de uma barra invertida é erro. Uma barra invertida sozinha em um caminho do Windows é quase sempre a causa, porque \U, \P e \D não são escapes.
Cole o seu JSON e veja exatamente onde ele quebra
Nada do que você cola sai do seu navegador. A lista de permissões connect-src transforma isso em uma garantia do navegador, e não em uma promessa. Confira você mesmo
O que realmente causa isso
Ordenados por quantas vezes cada um acaba sendo a resposta.
-
01 Um caminho de arquivo do Windows com barras invertidas simples
Esta é a causa dominante. Toda barra invertida dentro de uma string JSON precisa ser dobrada. Barras normais também funcionam no Windows na maioria dos contextos e evitam o problema por completo.
Quebra
{ "path": "C:\Users\priya\config.json" }Funciona
{ "path": "C:\\Users\\priya\\config.json" } -
02 Um escape hexadecimal emprestado de outra linguagem
O JSON não tem o escape \x. C, Python e JavaScript aceitam \x41 para a letra A; o JSON exige \u0041.
Quebra
{ "c": "\x41" }Funciona
{ "c": "\u0041" } -
03 Uma expressão regular colada dentro de uma string
Padrões como \d, \s e \w não são escapes do JSON. Toda barra invertida do padrão precisa ser dobrada antes de entrar em uma string JSON.
Quebra
{ "pattern": "^\d{3}-\d{4}$" }Funciona
{ "pattern": "^\\d{3}-\\d{4}$" } -
04 Um escape de aspas simples
\' é válido em JavaScript e em JSON5 mas não em JSON. Dentro de uma string com aspas duplas, um apóstrofo não precisa de escape nenhum.
O mesmo erro em outros runtimes
O problema de fundo é idêntico; só muda a redação. Se um colega reportar uma dessas mensagens, ele está olhando exatamente para a mesma coisa que você.
| Python | Invalid \escape: line 1 column 9 (char 8) |
|---|
Perguntas frequentes
- Por que a minha string em Python parece certa e mesmo assim falha?
- Porque a barra invertida é consumida duas vezes: uma pelo literal de string do Python e outra pelo JSON. Use uma raw string para o literal, ou monte o objeto e chame json.dumps em vez de escrever JSON à mão.
- \/ é permitido mesmo?
- É. Escapar uma barra normal é opcional em JSON e as duas formas significam o mesmo caractere. Isso existe para que JSON possa ser embutido com segurança dentro de uma tag script no HTML, onde a sequência </ encerraria o elemento.
Conserte agora
Cole o payload na ferramenta acima, ou vá direto para a que foi feita para este trabalho.
Escapar uma string corretamente