Como a validação funciona aqui
A página usa o JSON.parse nativo do navegador — exatamente o mesmo parser que roda no Node.js e no seu front-end. Se a ferramenta aceitou, sua aplicação aceita; se recusou, quebraria em produção do mesmo jeito. Não há regra própria nem "modo tolerante": o critério é a RFC 8259, a especificação oficial do formato.
Como todo o processamento acontece dentro do navegador, nenhum byte do payload sai da sua máquina. Dá para colar a resposta de uma API com CPF, endereço ou dado de pedido sem transformar isso num incidente de vazamento — algo que não se pode dizer de validadores que enviam o conteúdo para um servidor.
Quando o parse falha, o navegador informa a posição do caractere problemático. A ferramenta converte essa posição em linha e coluna, que é a informação de que você precisa de verdade quando o arquivo tem quatro mil linhas e a mensagem original diz apenas "position 38412".
Passo a passo
- Cole o JSON bruto na caixa — copiado do DevTools, de um log, do Insomnia ou do Postman, tanto faz.
- Validar quando você só quer saber se está correto, sem alterar o texto.
- Formatar (2 espaços) para leitura e depuração no dia a dia; Formatar (4) quando o trecho vai para documentação, slide ou revisão de código, onde a indentação maior ajuda a distinguir os níveis.
- Minificar antes de colar num campo de configuração, numa variável de ambiente ou no corpo de uma requisição de teste.
- Ordenar chaves antes de comparar duas respostas diferentes da mesma API.
- Copiar devolve o conteúdo já tratado para a área de transferência, sem precisar selecionar tudo com o mouse.
Os tipos que o JSON aceita — e os que não
Boa parte dos erros nasce de escrever em JSON algo que só existe na linguagem de origem. Esta tabela resume o que é válido:
| Tipo | Exemplo válido | O que costuma dar errado |
|---|---|---|
| String | "Olá, mundo" | Aspas simples não valem. Aspas duplas dentro da string precisam de escape: "ele disse \"oi\"". |
| Número | 42, -3.5, 1.2e3 | Zero à esquerda é inválido (012). NaN e Infinity não existem. Nada de aspas se for número de verdade. |
| Booleano | true, false | Sempre minúsculo. True/False vindos de Python quebram o parse. |
| Nulo | null | None (Python), nil (Ruby) e undefined (JS) são inválidos. |
| Objeto | {"id": 7} | A chave é obrigatoriamente uma string entre aspas duplas. |
| Array | [1, 2, 3] | Pode misturar tipos, mas nunca terminar com vírgula. |
| Data | não existe | Use string ISO 8601 ("2026-07-25T14:30:00Z") ou timestamp numérico. Evite 25/07/2026. |
| Comentário | não existe | Nem // nem /* */. Se precisa comentar, o formato é outro (veja abaixo). |
Os erros de JSON que todo mundo comete
- Vírgula sobrando no final —
{"a": 1,}é inválido em JSON puro, embora o JavaScript aceite em objetos literais desde o ES5. É o erro número um em arquivos editados à mão. - Aspas simples —
{'a': 1}não passa. Aparece muito ao copiar um dicionário Python impresso no terminal. - Chave sem aspas —
{a: 1}funciona em JS, não em JSON. Copiar direto do console do navegador cai nessa armadilha. - Comentários — não existem no formato. Para configs comentadas, use JSONC, YAML ou TOML.
- Valores especiais —
undefined,NaNeInfinitynão fazem parte do JSON; troque pornullou por uma string. - Barra invertida solta — caminhos do Windows precisam de escape duplo:
"C:\\Users\\ana". Com uma barra só, o parser tenta interpretar uma sequência de escape inexistente. - Quebra de linha dentro de string — apertar Enter no meio de um valor invalida o JSON; use
\n. - BOM invisível — arquivos salvos como "UTF-8 com BOM" no Bloco de Notas carregam três bytes ocultos no início e falham na posição 0 sem motivo aparente.
O clássico Unexpected token < in JSON at position 0 não é erro de JSON: significa que a resposta começa com <, ou seja, veio HTML. Quase sempre é uma página de 404, de 500 ou uma tela de login entregue no lugar da resposta da API. Abrir a URL diretamente no navegador resolve o diagnóstico em dez segundos.
Formatar ou minificar: o que muda na prática
Formatar e minificar não alteram os dados, só o espaço em branco entre eles. A diferença de tamanho, porém, é real: um payload indentado com 2 espaços costuma ficar de 15% a 30% maior que a versão minificada, dependendo de quantos níveis de aninhamento existem. Numa API que responde milhões de vezes por dia, isso é banda desperdiçada; num arquivo que você vai ler, é o contrário — a indentação é o que torna o conteúdo compreensível.
A regra prática: minificado para máquina, formatado para gente. Vale lembrar que quase todo servidor moderno aplica compressão gzip ou brotli na resposta, e a compressão elimina boa parte da diferença. Se seu gargalo é rede, medir antes de otimizar continua sendo mais barato que adivinhar.
Ordenar chaves: o truque do diff limpo
Comparar dois JSONs com as chaves em ordens diferentes é sofrimento desnecessário. A ordem das chaves em um objeto JSON não tem significado — {"a":1,"b":2} e {"b":2,"a":1} representam o mesmo dado —, mas qualquer ferramenta de diff trata as duas versões como linhas distintas e enche a tela de vermelho.
O botão Ordenar chaves reorganiza tudo alfabeticamente, de forma recursiva, inclusive dentro de objetos aninhados em arrays. Passe as duas versões pela ferramenta antes do diff e sobram apenas as diferenças que importam. É especialmente útil ao comparar a resposta de homologação com a de produção, ou a saída de duas versões da mesma API.
Atenção a um detalhe: a ordem dentro de arrays é preservada, e deve ser mesmo — em [1,2,3] a sequência faz parte do dado.
JSON, JSONC, JSON5 e NDJSON: quando usar cada um
| Formato | Aceita comentário? | Use quando |
|---|---|---|
| JSON | Não | Comunicação entre sistemas, APIs, armazenamento. É o único que qualquer linguagem lê sem biblioteca extra. |
| JSONC | Sim | Arquivos de configuração lidos por editores e ferramentas — o tsconfig.json e as configurações do VS Code usam essa variante. |
| JSON5 | Sim | Configs escritas à mão que se beneficiam de chaves sem aspas, vírgula final e números hexadecimais. Exige biblioteca específica. |
| NDJSON | Não | Logs e exportações grandes: um objeto JSON completo por linha, processável em streaming sem carregar o arquivo inteiro na memória. |
Se você precisa colar um JSONC ou JSON5 aqui, remova comentários e vírgulas sobrando antes — esta ferramenta valida JSON estrito de propósito, porque é isso que o servidor do outro lado vai fazer.
Perguntas frequentes
O que significa o erro "Unexpected token < in JSON at position 0"?
O conteúdo não é JSON: começa com <, isto é, é HTML. Quase sempre é uma página de erro 404, 500 ou uma tela de login que o servidor devolveu no lugar da resposta da API. Abra a URL no navegador e veja o que ela realmente retorna antes de mexer no código.
JSON aceita datas?
Não existe tipo data em JSON. A convenção é usar string no formato ISO 8601 (2026-07-25T14:30:00Z) ou um timestamp Unix numérico. Evite formatos locais como 25/07/2026, porque cada linguagem interpreta de um jeito.
Devo indentar com 2 ou 4 espaços?
Dois espaços é o padrão de fato — package.json, composer.json e tsconfig.json usam dois. Quatro espaços facilita a leitura de estruturas rasas em documentação e slides. Dentro de um mesmo repositório, mantenha um só e deixe o formatador decidir.
Existe limite de tamanho para o JSON colado?
O limite é a memória do seu navegador, não de um servidor: arquivos de alguns megabytes funcionam bem em máquinas comuns. Acima disso, a aba pode congelar por alguns segundos durante o parse. Para arquivos realmente grandes, prefira ferramentas de linha de comando como o jq.
Por que meu JSON com vírgula no final funciona no JavaScript mas dá erro aqui?
Objetos e arrays literais do JavaScript aceitam vírgula sobrando desde o ES5, mas a especificação do JSON nunca permitiu. Como esta página usa o JSON.parse nativo, ela aplica a regra do JSON — igual ao que o seu backend fará.