Unexpected end of JSON input
O parser chegou ao fim da entrada enquanto ainda esperava mais. Ou a string estava vazia desde o começo, ou um valor ficou aberto e o documento estava truncado. Repare que esta mensagem não traz posição, e é justamente isso que a distingue dos erros que trazem.
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 A string está vazia
JSON.parse("") lança isso na hora. Uma string vazia não é JSON válido. Normalmente vem de um HTTP 204, de uma resposta sem corpo, ou de uma chave do localStorage gravada como string vazia.
Quebra
JSON.parse(localStorage.getItem('draft'))Funciona
const raw = localStorage.getItem('draft'); const draft = raw ? JSON.parse(raw) : null; -
02 O corpo da resposta já tinha sido consumido
O corpo de um Response só pode ser lido uma vez. Chamar res.text() e depois res.json() na mesma resposta devolve string vazia na segunda vez.
Quebra
const text = await res.text(); const data = await res.json(); // body already usedFunciona
const text = await res.text(); const data = text ? JSON.parse(text) : null; -
03 O documento está truncado
Uma conexão caída, um limite de tamanho de corpo (o Express usa 100 kB por padrão), uma leitura de stream que terminou cedo demais, ou um arquivo escrito enquanto era lido. Se a entrada acaba no meio de um objeto, o nosso validador aponta cada colchete que ficou aberto e onde cada um começou.
Quebra
{"users": [{"id": 1}, {"id":Funciona
{"users": [{"id": 1}, {"id": 2}]} -
04 O cache do npm ou do yarn está corrompido
Boa parte das buscas por essa string é sobre npm e não sobre código de aplicação. Um arquivo de cache escrito pela metade produz o mesmo erro durante a instalação. Rode npm cache clean --force, apague node_modules e package-lock.json, e instale de novo.
-
05 Você parseou o retorno de uma função que não devolveu nada
JSON.parse(undefined) dá outra mensagem ("undefined" is not valid JSON), mas uma função que devolve string vazia em vez de undefined cai aqui.
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 value: line 1 column 1 (char 0) |
|---|---|
| Python, truncated object | Expecting ',' delimiter: line 1 column 28 (char 27) |
Perguntas frequentes
- Por que esta mensagem não tem linha nem coluna?
- Porque não há posição para apontar. A falha é que a entrada acabou, então o lugar problemático é o fim do documento. O nosso validador reporta isso como fim da entrada e lista quais colchetes ainda estavam abertos.
- JSON.parse(null) lança isso?
- Não. JSON.parse(null) converte null para a string "null" e devolve null, o que surpreende bastante gente. Quem lança é a string vazia.
Conserte agora
Cole o payload na ferramenta acima, ou vá direto para a que foi feita para este trabalho.
Achar o colchete não fechado