O que esta ferramenta faz
Ela reindenta. Os caracteres que compõem cada valor continuam exatamente os que você digitou.
{"id":12345678901234567890,"ratio":1.0,"enorme":1e400}
{
"id": 12345678901234567890,
"ratio": 1.0,
"enorme": 1e400
}
O jeito óbvio muda os seus números
Passe a mesma entrada pela implementação óbvia — JSON.parse e depois JSON.stringify — e os três valores mudam:
| escrito | após uma ida e volta de análise e impressão |
|---|---|
12345678901234567890 | 12345678901234567000 |
1.0 | 1 |
1e400 | null |
Um número JavaScript é um ponto flutuante de dupla precisão. Guarda cerca de quinze dígitos, não lembra que você escreveu um ponto decimal, e além de uns 1,8 × 10³⁰⁸ vira infinito — que o JSON não representa e que sai como null.
Nada disso é curiosidade de arredondamento. 12345678901234567890 é a forma de um snowflake do Twitter, de um bigint do PostgreSQL ou de uma referência de pagamento, e um formatador que o altera devolve um arquivo que já não aponta para a mesma linha.
Esta ferramenta lê cada número como o texto que ele é e reescreve esse texto.
Chaves repetidas são recusadas, não arbitradas
{ "port": 8080, "host": "example.com", "port": 3000 }
A RFC 8259 diz que os nomes de um objeto deveriam ser únicos — um «deveria», não um «deve» — e nada diz sobre o que fazer quando não são. Na prática os analisadores divergem: a maioria fica com o último, alguns com o primeiro, outros recusam o documento.
Escolher por você produziria um arquivo que já não diz o mesmo, sem nada que avisasse. A ferramenta para e dá a posição da segunda chave.
Só JSON estrito
Nem comentários, nem vírgula final, nem strings entre aspas simples. Isso é JSON5 e JSONC: linguagens diferentes que moram em arquivos chamados .json.
Aceitá-las seria produzir uma saída que metade dos analisadores do mundo recusa, ou seja, o contrário do que serve um formatador. A mensagem de erro nomeia a posição do caractere que quebrou.
As duas opções
Indentação — dois espaços por padrão. Zero produz a forma minificada.
Ordenar chaves — em ordem alfabética, recursivamente, com os arrays na ordem deles. Prático antes de comparar dois arquivos; deixe desligado quando a ordem das chaves significa algo.
Privado por padrão
Tudo é executado localmente no seu navegador com JavaScript. Os seus dados nunca são enviados para um servidor, o que torna a ferramenta segura para conteúdo sensível e funciona offline.