Ir para o conteúdo
jsonbeautifiers
Português
V8 Verificado rodando o parser em Node v24.15.0, V8 13.6.233.17.

"undefined" is not valid JSON

Você passou undefined para o JSON.parse. Ele é convertido para a string "undefined", e o JSON não tem esse literal, então falha na posição 0. A pergunta de verdade é de onde veio esse undefined, e há só umas três respostas.

Você também pode ver isso escrito assim

  • Unexpected token u in JSON at position 0

O V8 reescreveu a maior parte das suas mensagens de erro de JSON em 2022. A redação antiga ainda é o que a maioria dos resultados de busca mostra, mas nenhum runtime atual a emite.

Cole o seu JSON e veja exatamente onde ele quebra

Entrada

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.

  1. 01 Uma chave de armazenamento que nunca foi definida

    localStorage.getItem devolve null para uma chave que não existe, e JSON.parse(null) na verdade funciona. Mas se a string "undefined" foi gravada nessa chave em algum momento, ler de volta produz exatamente este erro, de forma permanente, até a chave ser limpa.

    Quebra

    localStorage.setItem('token', someUndefinedValue);   // writes "undefined"
    JSON.parse(localStorage.getItem('token'));

    Funciona

    const raw = localStorage.getItem('token');
    const token = raw && raw !== 'undefined' ? JSON.parse(raw) : null;
  2. 02 Um valor assíncrono não foi aguardado

    Ler uma propriedade de uma promise, ou de um estado que ainda não carregou, dá undefined. O parsing roda antes de os dados chegarem.

    Quebra

    const data = JSON.parse(fetchUser().body);

    Funciona

    const res = await fetchUser();
    const data = JSON.parse(await res.text());
  3. 03 Uma propriedade que não existe

    Um campo renomeado, um erro de digitação, ou uma API que mudou de formato. obj.data quando o payload usa obj.result dá undefined sem nenhum outro aviso.

Perguntas frequentes

Por que JSON.parse(null) funciona e JSON.parse(undefined) não?
Os dois são convertidos para string primeiro. null vira "null", que é um documento JSON válido, então faz o parsing e devolve null. undefined vira "undefined", e o JSON não tem literal nenhum para isso.
Como limpo uma chave que guarda a string "undefined"?
localStorage.removeItem(chave), ou proteja a leitura como mostrado acima. O valor ruim sobrevive aos recarregamentos, e é por isso que este erro costuma parecer intermitente entre máquinas.

Conserte agora

Cole o payload na ferramenta acima, ou vá direto para a que foi feita para este trabalho.

Validar um payload