Você acha que seu JSON está bom porque o JSON.parse não disparou erro? Na realidade, ser parseável não significa que os dados estão corretos. O que você faz quando o backend retorna {user_id: 123} (chave sem aspas)? A API espera um campo email, mas você só vê mail? Essas são as três camadas da validação de JSON — a maioria dos tutoriais só cobre a primeira. Este post detalha as 3 camadas e como o formatador de JSON do Piick aponta a localização exata do erro.
Os três níveis da validação de JSON
A validação tem três camadas, e cada uma resolve um problema diferente:
- Camada de sintaxe: se a string é um JSON válido — aspas, vírgulas e colchetes batem. O
JSON.parsefaz isso por padrão. - Camada de estrutura: se os dados casam com um schema predefinido —
useré um objeto,tagsé um array, os campos obrigatórios estão presentes. O JSON Schema é o padrão de fato aqui. - Camada semântica: se os valores fazem sentido —
statusestá em um enum válido,ageestá entre 0 e 150,emailtem o formato correto. Essa camada depende do código de negócio ou de bibliotecas como Zod e Ajv.
90% dos bugs vivem nas duas últimas camadas. A camada de sintaxe é só o ticket de entrada.
Sintaticamente correto não é o mesmo que dados corretos
Aqui vai um cenário real: a API deveria retornar { "code": 0, "data": { "userId": 123 } }, mas na verdade retorna { "data": { "userid": 123 } } — caixa errada. O JSON.parse passa, mas o frontend lê userId e recebe undefined, então a UI fica em branco. Esse tipo de bug é especialmente difícil de rastrear em produção.
A solução: use JSON Schema para gerar os tipos em TypeScript, ou faça validação de schema na camada de requisição. Trate o schema como o contrato da API e rejeite tudo que não bater imediatamente, em vez de esperar por erros em tempo de execução.
5 erros comuns em JSON e como depurar
- Vírgulas finais
{"a":1,}— remova a última vírgula, ou use o modo tolerante do formatador de JSON do Piick para removê-las automaticamente - Strings com aspas simples
{'a':1}— substitua globalmente por aspas duplas, ou deixe o modo tolerante cuidar disso - Chaves sem aspas
{a:1}— envolva as chaves com aspas duplas - Comentários esquecidos
// xxx— apague-os, ou deixe o modo tolerante removê-los - Cabeçalho BOM
{"a":1}— salve como UTF-8 sem BOM
Dica de depuração: não conte colchetes no olho. Use direto o recurso “mostrar números de linha” da ferramenta.
Mais um caso clássico: copiar JSON de um PDF ou de uma página web frequentemente insere caracteres invisíveis como o U+200B (zero-width space) ou o U+FEFF (BOM). Eles passam despercebidos no olho, mas quebram o parser. Se o erro parece estar numa linha “vazia”, vale abrir o arquivo em um editor hexadecimal e conferir o início do arquivo.
Como localizar a posição exata do erro após o parse
Os erros do JSON.parse só dizem Unexpected token sem informar onde. O Chrome DevTools, o Postman e plugins do VS Code mostram números de linha, mas todos exigem copiar e colar manualmente.
Mais preciso é o formatador de JSON do Piick — ele lê o position N do erro do V8, converte para um número de linha e coluna e exibe no banner de erro. Cole um JSON quebrado e você verá exatamente em qual linha e coluna está o erro. Para pontos de partida em validação de schema, confira a lista oficial de implementações de JSON Schema.
Abra agora o formatador de JSON do Piick, cole uma string de JSON e experimente a localização precisa dos erros que ele oferece.