Desenvolvimento

Formatador, validador e minificador de JSON

Cole o JSON e ele é reformatado enquanto você digita. Se não der para analisar, você recebe a linha e a coluna onde o analisador desistiu, que costuma ficar alguns caracteres depois do erro de verdade. A entrada válida também passa por uma checagem dos dois problemas que o analisador deixa passar sem reclamar e que ainda assim fazem estrago: chaves duplicadas e inteiros grandes demais para o JavaScript.

Dois espaços é o padrão na maioria dos guias de estilo. Minifique tudo o que for trafegar pela rede.

Opções

Ordenar deixa dois dumps do mesmo objeto prontos para um diff. Também joga fora a ordem que o autor tiver escolhido.

0Bytes de entrada
0Minificado
0Chaves
0Valores
0Profundidade

Formatar é uma viagem de ida e volta, não um retoque cosmético

Esta ferramenta não acrescenta quebras de linha ao seu texto. Ela analisa o JSON até virar um valor e imprime esse valor de novo. Tudo o que não fazia parte dos dados some no caminho, o que quase sempre é o que você quer e de vez em quando é uma surpresa.

A gramática inteira, em uma lista só

JSON é minúsculo de propósito, e é por isso que tanta coisa que parece JSON não é. A lista completa do que é permitido: objetos, arrays, strings entre aspas duplas, números, true, false e null. Só isso. Rejeitado explicitamente:

Desde a RFC 8259 o nível mais alto pode ser qualquer valor, não só um objeto ou um array, então um documento que contém apenas 42 é JSON válido. Analisadores antigos discordam. Se você está gerando saída para algo antigo, envolva o valor.

Os números são onde o JSON mente baixinho

A especificação não põe limite no tamanho nem na precisão de um número. O JavaScript põe: todo número é um ponto flutuante de 64 bits, então os inteiros acima de 9.007.199.254.740.991 não podem ser todos representados. Analise 9007199254740993 e o que volta é 9007199254740992, sem erro nenhum em lugar nenhum.

Onde isso dói mais é nos identificadores. IDs de banco de dados, snowflakes do Discord e timestamps em nanossegundos cruzam essa linha o tempo todo, e é por isso que APIs bem projetadas mandam IDs grandes como strings. A ferramenta varre a sua entrada em busca de literais inteiros que mudam quando o JavaScript os lê e diz quais são. Ela não consegue consertá-los: quando o valor existe, os dígitos já se perderam. Se você vir esse aviso, trate a saída formatada como insegura para colar de volta em qualquer coisa que importe.

Chaves duplicadas são analisadas sem reclamação e não significam nada

A RFC 8259 diz que os nomes dentro de um objeto DEVERIAM ser únicos e deixa o comportamento indefinido quando não são. Na prática o JavaScript fica com o último, o Python fica com o último, e algumas configurações de Go e de Java levantam um erro. Um arquivo de configuração com "timeout" duas vezes é, portanto, um bug de verdade que a maioria das ferramentas nunca vai mencionar. Esta aqui lê o texto cru antes de a análise jogar a evidência fora, e lista qualquer chave que aparecer duas vezes dentro do mesmo objeto.

Onde isto deixa de funcionar

Ela valida a sintaxe, não o significado. Um JSON válido a que falta um campo que o seu serviço exige passa aqui do mesmo jeito: para isso você precisa de um validador de JSON Schema, e esta ferramenta não é um deles.

Ela não lê os formatos que quase são JSON. JSON5 e JSONC, que permitem comentários e vírgulas sobrando, falham os dois. NDJSON — um objeto por linha, sem array em volta — também falha, porque a segunda linha é uma entrada inesperada. Apague os caracteres que sobram ou envolva as linhas em um array você mesmo.

E tudo roda na thread principal da página. Alguns megabytes rodam sem problema. Em algum ponto acima disso a aba para de responder enquanto trabalha, e um arquivo muito grande pode esgotar a memória de vez. Se o seu JSON veio de uma exportação de banco de dados, use um analisador de streaming na sua própria máquina em vez de uma aba do navegador.

Perguntas frequentes

O meu JSON é enviado para algum lugar?

Não. A análise, a formatação e a varredura acontecem todas nesta aba, com o próprio analisador de JSON do navegador. Nada é transmitido e nada é guardado, então recarregar a página perde o que você digitou.

Por que o erro aponta para o caractere errado?

Porque um analisador só percebe um problema quando chega a algo que não poderia vir em seguida de jeito nenhum. Uma vírgula faltando costuma ser relatada no começo da chave seguinte, e uma string não fechada é relatada onde a próxima aspa aparecer. Olhe logo antes da posição que ele indica.

Dá para formatar JSON que tem comentários?

Do jeito que está, não. Comentários transformam o arquivo em JSONC ou JSON5, não em JSON, e o analisador os rejeita. Tire as linhas de comentário antes, ou use o formato que o seu editor ou o seu carregador de configuração realmente espera.

Ordenar as chaves muda os dados?

Não: por definição os membros de um objeto não têm ordem, então ordená-los produz um documento equivalente. Vale a pena fazer isso antes de um diff e vale a pena evitar em arquivos que pessoas leem, onde o agrupamento escolhido pelo autor costuma carregar significado.

Qual é o maior arquivo que isto aguenta?

Alguns megabytes vão bem em uma máquina normal. Passando disso a aba congela por segundos inteiros, porque formatar mantém na memória ao mesmo tempo o texto original, o valor analisado e a saída. Não há um limite rígido, só um ponto em que deixa de ser agradável.

Última atualização 19 de setembro de 2026