Como resolver erro Unexpected token o in JSON at position 1

Neste artigo você vai aprender a como resolver erro Unexpected token o in JSON, um erro muito comum ao trabalhar com JSON

O erro Unexpected token o in JSON at position 1 aparece quando você entrega um objeto JavaScript pro JSON.parse em vez de uma string JSON

O caractere da posição 1 dessa string é a letra o, e é dela que vem a mensagem

Ou seja: o problema não é o seu JSON estar quebrado, é o dado JÁ ser objeto

O conserto é simples: se o valor já é objeto, use ele direto, sem parse

Só passe pelo JSON.parse o que for string JSON mesmo, como no exemplo abaixo

resolver erro Unexpected token o in JSON capa

Fala programador(a), beleza? Bora aprender mais sobre JSON e seus erros!

Você não pode utilizar o JSON diretamente, precisa antes fazer um parse para poder tê-lo como objeto

Algumas das possíveis causas para este erro são:

  • JSON mal formatado;
  • Utilização incorreta do tipo de dado;
  • JSON mal construído;
  • Não utilização correta dos métodos de conversão;

Antes de utilizar o dado JSON, passe pelo método parse, desta maneira:

const myJson = '{"name": "Matheus", "age": 30}'

const myObject = JSON.parse(myJson)

console.log(myObject.name) // Matheus

Aqui temos um JSON corretamente criado, que é convertido para objeto JavaScript, assim não temos erro algum

Formação Vibe Coding
Formação Recomendada

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 27min

Quer entender mais sobre JSON? Confira o vídeo abaixo:

Uma outra dica interessante é verificar se seu JSON está corretamente criado conforme os padrões estabelecidos por este tipo de dado

Inclusive no vídeo te explico todos os detalhes para criar bons JSON’s, que sempre vão funcionar

Este tipo de dado é frequentemente utilizado entre a comunicação de sistemas, como em APIs

Conclusão

Neste artigo você vai aprender a como resolver erro Unexpected token o in JSON

Utilizamos o método parse para conversão do dado em JSON

Foi também evidenciado a possível má formação do JSON, que deve ser cuidadosamente observada

Confira nossos cursos gratuitos no Youtube, com vídeos todos os dias! Se inscreva e ative o sininho para receber as notificações e aprender mais ainda sobre desenvolvimento web!

Veja também nosso catálogo de cursos na Udemy, todos com exercícios e projetos práticos, nas mais diversas tecnologias. O link acima contém um cupom de desconto para os curso

Fechar com a saída prática: se o dado JÁ é objeto, não passa pelo parse

Citar os exemplos do próprio commit: JSON.parse(NaN) saiu de ‘Unexpected token N in JSON at position 0’ pra ‘"NaN" is not valid JSON’, e JSON.parse("{a:1}") saiu de ‘Unexpected token a in JSON at position 1’ pra "Expected property name or ‘}’ in JSON at position 1". Deixar claro que a mensagem varia por engine e versão, e que a causa é a mesma

Seção ‘E no Firefox, qual é a mensagem?’ mostrando que o Firefox reporta o mesmo problema com outro texto e usando linha e coluna em vez de posição: SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

Seção ‘Você provavelmente não precisa do JSON.parse’ com dois casos práticos: com fetch, o response.json() já devolve uma Promise que resolve com o corpo já convertido em valor JavaScript (objeto, array, string, número), então chamar JSON.parse depois dele quebra; com axios, o transformResponse padrão já usa o JSON.parse nativo (é o que o parseReviver e o forcedJSONParsing da doc controlam), então o response.data normalmente já vem objeto. Mostrar o antes e o depois em bloco de código

Sublista com as causas clássicas de JSON inválido listadas na página de erros do MDN, que derrubam o JSON.parse mesmo quando o dado é string: vírgula sobrando (trailing comma), aspas simples no lugar de aspas duplas nas propriedades, zeros à esquerda em números, string não terminada e escape inválido

Seção ‘E quando o JSON vem de um arquivo?’ explicando que em módulos ES a importação usa import attributes, padronizada no ECMAScript 2025: import config from "./config.json" with { type: "json" }, e que a forma antiga com assert { type: "json" } foi substituída

Bloco de FAQ com as perguntas do campo geo.faq, cada resposta em 2 a 3 linhas

Não há material próprio sobre este erro pra sustentar bloco de primeira mão, e o vídeo disponível é sobre JWT, assunto vizinho mas não o mesmo, então nada de ‘testamos’ aqui

Pra abrir esse bloco depois, o que precisa ser capturado com material real: rodar JSON.parse({ nome: ‘Matheus’ }) no console do Chrome atual e no Node instalado na máquina e colar as mensagens exatas que saírem, rodar o mesmo no Firefox pra registrar a versão com linha e coluna, e gravar um caso de fetch onde a pessoa chama response.json() e depois JSON.parse por cima, mostrando o erro nascendo

Gancho natural com o vídeo de JWT: o payload decodificado do token costuma chegar como objeto, e é aí que muita gente manda um parse a mais e toma esse SyntaxError. Só que isso precisa ser reproduzido e registrado em vídeo ou print antes de virar texto em primeira pessoa

Perguntas frequentes

O que significa Unexpected token o in JSON at position 1?

Significa que o JSON.parse recebeu um valor que não é string JSON

O parse lê esse o, não reconhece como JSON válido e lança o SyntaxError

Por que a mensagem fala justamente da letra o?

A posição 0 é o colchete de abertura, que o parser até aceita como início de array

O estouro acontece no caractere seguinte, e é ele que aparece na mensagem

Meu erro aparece como "[object Object]" is not valid JSON, é o mesmo problema?

É o mesmo problema, com texto novo

O V8 reescreveu as mensagens do JSON.parse na iniciativa de melhoria de mensagens (issue v8:6551, commit de 16/05/2022): JSON.parse(NaN) saiu de "Unexpected token N in JSON at position 0" pra ‘"NaN" is not valid JSON’

A mensagem exata depende do navegador e da versão do Node.js, então o texto antigo ainda aparece em ambientes mais velhos

E no Firefox, qual mensagem aparece?

O Firefox reporta com outro texto e usando linha e coluna em vez de posição

A mensagem é: SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

Muda a frase, a causa é a mesma

Preciso usar JSON.parse depois do fetch?

Não

O response.json() devolve uma Promise que resolve já com o resultado do parse do corpo: objeto, array, string, número e por aí vai

Chamar o JSON.parse em cima disso é justamente o que gera o erro, porque o valor já é objeto

E com axios, por que dá esse erro?

Pelo mesmo motivo

O axios já faz o parse por padrão: o transformResponse padrão usa o JSON.parse nativo (é o que o parseReviver da doc alimenta como reviver, e o que o forcedJSONParsing força)

Então o response.data normalmente já chega como objeto e não deve passar por parse de novo

Como saber se o problema é o dado ou o meu JSON?

Dá pra separar em dois casos

Se a mensagem cita outro caractere, o problema é a string mesmo: a página de erros do MDN lista as causas clássicas, vírgula sobrando, aspas simples no lugar de aspas duplas nas propriedades, zeros à esquerda em números, string não terminada e escape inválido

O JSON.parse sempre lança erro quando a string é inválida?

Sim

O JSON.parse analisa a string segundo a gramática JSON e lança SyntaxError se ela não for JSON válido

Por isso vale envolver o parse em try catch quando o dado vem de fora, tipo resposta de API ou de localStorage

Como importar um arquivo .json sem cair nesse erro?

Em módulos ES a importação usa import attributes, padronizada no ECMAScript 2025

A forma é: import config from "./config.json" with { type: "json" }

A sintaxe antiga com assert { type: "json" } foi substituída

Leia também

Subscribe
Notify of
guest

1 Comentário
Oldest
Newest Most Voted
Luiz

não entendi o que essa “vídeoaula” tem a ver com solução do problema em questão

Formações

Formação SAAS com IA

Formação SAAS com IA

Tire usas ideias do papel criando softwares com IA, integre pagamentos e lance seu projeto!

  • 291 aulas
  • 18 projetos
  • 24h 17min

Blog | Mais populares