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

"[object Object]" is not valid JSON

O JSON.parse espera uma string. Quando você entrega um objeto, o JavaScript converte esse objeto para string primeiro, e a conversão padrão produz o texto literal "[object Object]". Aí o parser falha na letra o da posição 1. Os dados estão bem; a chamada de parse é que está sobrando.

Você também pode ver isso escrito assim

  • Unexpected token o in JSON at position 1

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 O valor já tinha sido parseado

    axios, jQuery.ajax e muitos clientes de API fazem o parsing do JSON por você quando o Content-Type indica isso. Parsear o resultado de novo é o que dispara este erro.

    Quebra

    const res = await axios.get('/api/user');
    const user = JSON.parse(res.data);   // res.data is already an object

    Funciona

    const res = await axios.get('/api/user');
    const user = res.data;
  2. 02 Um objeto foi guardado sem stringify

    localStorage e sessionStorage guardam strings. Passar um objeto chama String(obj), o que grava o texto literal "[object Object]". Nesse ponto os dados se foram, não é que estejam apenas ilegíveis.

    Quebra

    localStorage.setItem('user', user);
    const back = JSON.parse(localStorage.getItem('user'));

    Funciona

    localStorage.setItem('user', JSON.stringify(user));
    const back = JSON.parse(localStorage.getItem('user'));
  3. 03 Um objeto foi interpolado em um template string

    Montar o corpo de uma requisição com `{"user": ${user}}` insere "[object Object]" em vez do objeto. Monte o objeto e aplique stringify no conjunto todo.

    Quebra

    body: `{"user": ${user}}`

    Funciona

    body: JSON.stringify({ user })

Perguntas frequentes

O que aconteceu com "Unexpected token o in JSON at position 1"?
Era a redação do V8 anterior a 2022 para o mesmo engano. O o era o segundo caractere da string "[object Object]". A mensagem moderna cita o texto problemático no lugar, o que é bem mais útil.
Como deixo isso defensivo?
typeof value === "string" ? JSON.parse(value) : value. É uma proteção razoável em uma fronteira que você não controla, embora dentro do seu próprio código seja melhor saber qual dos dois você tem.

Conserte agora

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

Inspecionar um payload