FreeToGenerate.com

100% grátis · sem cadastro · roda inteiro no seu navegador

Cole um JSON acima para ver o resultado formatado aqui.

Tudo é processado no seu navegador: nada é enviado a servidor nenhum e nada fica salvo.

Também disponível em: English · Español · Français · العربية

Formatador de JSON online

Valide, formate e organize JSON sem sair do navegador, com um parser escrito do zero para nunca arredondar um número e apontar a linha exata de cada erro.

O que é um formatador de JSON

Um formatador de JSON pega um texto em JSON — normalmente minificado, sem espaço nenhum, vindo de uma resposta de API, de um log ou de um arquivo de configuração — e reorganiza em linhas e recuo, com uma chave por linha e a hierarquia visível de cara. No caminho, ele também valida: separa um documento sintaticamente correto de um que só parece certo.

É esse segundo passo que costuma ficar em segundo plano. A maioria das ferramentas de formatar JSON delega a validação para o parser que já vem embutido no navegador e se preocupa só com a indentação. Esta página trata os dois com o mesmo peso: formata, mas também aponta exatamente onde o documento quebra e o que ele deixaria passar em silêncio se você confiasse cegamente no parser padrão.

Como usar

  1. Cole ou digite seu JSON na caixa de texto principal; a validação roda a cada tecla e a linha de status logo abaixo mostra se o documento está válido.
  2. Ajuste a indentação e a ordenação com os botões 2 espaços, 4 espaços, Tab ou Minificar, e marque Ordenar chaves em ordem alfabética se precisar comparar objetos num diff.
  3. Copie o resultado clicando em Copiar na caixa de saída — ou use Carregar um exemplo primeiro para ver a ferramenta em ação antes de colar o seu próprio JSON.

Por que este formatador tem parser próprio

A maioria dos formatadores de JSON que existem por aí joga seu texto direto em JSON.parse e depois em JSON.stringify. O problema é que esse caminho converte todo número em double, e um double do JavaScript guarda no máximo 17 algarismos significativos. Testado aqui: {"id": 12345678901234567890} volta como {"id":12345678901234567000} — os três últimos dígitos mudam sozinhos. E {"price": 0.1000000000000000055511151231257827} volta simplesmente como {"price":0.1}, como se os outros dígitos nunca tivessem existido.

É por isso que esta ferramenta não usa o parser embutido do navegador: ela guarda o texto original de cada número, dígito por dígito, e reemite exatamente essa sequência na saída, então formatar aqui nunca arredonda, nunca trunca e nunca troca um 7 por um 0 no fim de um ID. Quando um número tem mais dígitos do que um double consegue representar com exatidão, a ferramenta lista cada ocorrência à parte — porque preservar os dígitos aqui não os torna seguros em qualquer lugar: o próximo programa que ler esse mesmo JSON com JSON.parse, incluindo o serviço em que você for colar o resultado, vai alterá-los do mesmo jeito. Ordenar chaves, aliás, reescreve a ordem original delas; a especificação diz que chave de objeto não tem ordem nenhuma, mas diff e code review se importam na prática, por isso essa opção vem desmarcada por padrão.

O mesmo cuidado vale para chaves repetidas, que são JSON perfeitamente válido mesmo soando estranho. {"id": 1, "name": "a", "id": 2} passa despercebido pelo parser nativo, que fica com a última ocorrência e devolve {"id":2,"name":"a"} — o primeiro valor some sem aviso nenhum. Esta ferramenta reporta cada repetição com o número da linha em que aparece e mantém as duas entradas na saída; cole esse resultado num programa que use JSON.parse e ele vai voltar a ficar só com a última, mas aqui pelo menos a decisão de qual delas vale foi sua, não do parser.

O que as mensagens de erro dizem (e o que os parsers nativos ainda não dizem)

Vale dar o crédito onde é devido: o Chrome e o Node modernos já informam a posição na maioria dos erros de JSON. Para {"a": 1,} — uma vírgula sobrando antes do fechamento — o parser nativo responde algo como Expected double-quoted property name in JSON at position 8 (line 1 column 9), o que já resolve boa parte do trabalho de achar o problema.

Restam duas lacunas reais, e são elas que esta ferramenta ataca. A primeira é que a posição nem sempre aparece: para {"a": True} o motor do navegador devolve só Unexpected token 'T', "{"a": True}" is not valid JSON — sem linha, sem coluna, nada. A segunda é que a mensagem descreve o que o parser esperava encontrar em seguida, não o engano que você de fato cometeu. Esta ferramenta nomeia o engano em si — 18 tipos distintos, entre eles vírgula sobrando no final, aspas simples em vez de duplas, chave sem aspas, o True, False e None do Python colados dentro de JSON, um comentário, um zero à esquerda num número, uma quebra de linha literal dentro de uma string — cada um com linha, coluna e a linha de origem logo abaixo, com um cursor apontando a coluna exata. E aponta o caractere certo: num documento de 4 linhas com vírgula sobrando, o erro cai na linha 3, coluna 12, em cima da própria vírgula, não na chave de fechamento onde o parser nativo só percebe que algo já tinha dado errado.

Essa precisão foi conferida, não só prometida: foram gerados 20.000 documentos JSON, 13.323 deles corrompidos de propósito com um caractere inserido, apagado ou trocado ao acaso em cada um. Comparado contra o JSON.parse do próprio navegador, este parser concordou sobre a validade de cada um dos 20.000 documentos — zero divergências. Todo documento que os dois aceitaram como válido também saiu reformatado para um resultado que volta a parsear no mesmo valor de origem, formatar duas vezes não muda mais nada na segunda vez, e objeto e array vazios saem compactos, {} e [], em vez de ocupar três linhas à toa. Só um limite vale registrar: o parser roda na thread principal da página, então um arquivo de vários megabytes vai travar a aba enquanto trabalha — para o JSON de configuração ou de resposta de API do dia a dia isso é instantâneo, mas não é ferramenta pensada para arquivo gigante.

Por que é grátis

Essa ferramenta roda inteira no seu navegador — o parser, a formatação, a checagem de duplicatas, tudo em JavaScript rodando localmente. Nada do que você cola sai da sua máquina, e isso importa mais aqui do que num formatador de texto qualquer: arquivo de configuração e resposta de API são exatamente o tipo de coisa que as pessoas colam em qualquer ferramenta online sem pensar duas vezes, e às vezes tem token, chave de acesso ou dado de cliente no meio.

Não tem conta para criar, marca d'água na saída, nem versão paga escondida atrás de um limite de caracteres. O FreeToGenerate.com é uma coleção de ferramentas assim: gratuitas, sem cadastro, feitas para abrir, resolver o que você precisa e fechar a aba.