Expected property name or '}' in JSON at position N (line L column C)
O parser abriu um objeto e esperava ou uma chave entre aspas duplas ou a chave de fechamento. Recebeu outra coisa. Em dados reais, essa outra coisa é quase sempre uma aspa simples ou um identificador solto, o que significa que o texto é o repr de um dict do Python ou um literal de objeto do JavaScript, e não JSON.
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 Chaves com aspas simples, de um dict do Python impresso com str()
print(meu_dict) e str(meu_dict) produzem sintaxe do Python, não JSON: aspas simples, e True, False e None em vez de true, false e null. Use json.dumps para produzir JSON.
Quebra
{'name': 'Priya', 'active': True}Funciona
{"name": "Priya", "active": true} -
02 Chaves sem aspas, de um literal de objeto do JavaScript
O JavaScript aceita identificadores soltos como chaves. O JSON não, nem quando a chave seria um identificador perfeitamente válido.
Quebra
{ name: "Priya", role: "admin" }Funciona
{ "name": "Priya", "role": "admin" } -
03 Um comentário dentro de um arquivo de configuração
O JSON não tem sintaxe de comentário. Um // ou um /* dentro de um objeto cai aqui.
-
04 Aspas tipográficas vindas de um processador de texto
O corretor automático do Word, do Google Docs, do Notas e de vários clientes de chat converte aspas retas em curvas. Para um parser JSON, aspas curvas são caracteres comuns, não delimitadores de string. O nosso validador nomeia essas aspas especificamente em vez de reportar um token inesperado genérico.
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 | Expecting property name enclosed in double quotes: line 1 column 2 (char 1) |
|---|---|
| Java (Jackson) | Unexpected character ('s' (code 115)): was expecting double-quote to start field name |
Perguntas frequentes
- Como produzo JSON a partir de um dict do Python do jeito certo?
- json.dumps(obj) devolve uma string JSON. str(obj) e print(obj) devolvem sintaxe do Python que só se parece. Essa é uma das fontes mais comuns de JSON inválido que existem.
- Dá para converter o repr de um dict do Python para JSON?
- Dá. ast.literal_eval faz o parsing com segurança para um objeto Python, que você depois passa pelo json.dumps. A nossa ferramenta de reparo faz o mesmo trabalho no navegador, convertendo as aspas simples e os literais True, False e None em uma passada só.
Conserte agora
Cole o payload na ferramenta acima, ou vá direto para a que foi feita para este trabalho.
Converter em JSON válido