Invalid \escape: line L column C (char N)
Uma barra invertida em uma string JSON é seguida de um caractere que não é nenhum dos nove escapes do JSON. Em código Python a confusão dobra, porque o literal de string do Python também consome barras invertidas, então o texto que chega ao parser não é o que você digitou.
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 do Windows
Toda barra invertida precisa dobrar para o JSON, e em um literal Python não raw precisa dobrar de novo para o Python. Usar uma raw string tira uma dessas camadas.
Quebra
json.loads('{"p": "C:\Users"}')Funciona
json.loads(r'{"p": "C:\\Users"}') -
02 Uma expressão regular
\d, \s e \w não são escapes do JSON. Dobre cada barra invertida.
-
03 Um escape hexadecimal \x
O JSON só tem \uXXXX. \x41 precisa virar \u0041.
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ê.
| JavaScript (V8) | Bad escaped character in JSON at position 9 (line 1 column 10) |
|---|
Perguntas frequentes
- Por que a mesma string funciona em um lugar e em outro não?
- Por quantas vezes ela passa por um literal de string. Um caminho escrito direto em um arquivo .json precisa de um nível de duplicação. O mesmo caminho dentro de um literal Python dentro de um argumento de shell pode precisar de três.
- Isso é a mesma coisa que o SyntaxWarning sobre sequências de escape inválidas?
- Não, e é fácil confundir. Aquele aviso é o Python reclamando do seu código-fonte, antes de qualquer JSON entrar na história. Este erro vem do parser de JSON e fala do conteúdo da string.
Conserte agora
Cole o payload na ferramenta acima, ou vá direto para a que foi feita para este trabalho.
Escapar corretamente