100 % local — seus dados nunca saem do seu navegador

Formatador JSON — leia um payload minificado

Indente JSON deixando os números como foram escritos. Um identificador de vinte algarismos guarda todos: você lê a resposta, não uma cópia dela.

Instantâneo Privado Zero cookies
Indentação

Entrada JSON

Saída JSON

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:

escritoapós uma ida e volta de análise e impressão
1234567890123456789012345678901234567000
1.01
1e400null

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.

Perguntas frequentes

Por que outros formatadores mudam meus números?
Porque analisam para um valor JavaScript e o imprimem de volta, e um número JavaScript é um ponto flutuante de dupla precisão. `12345678901234567890` vira `12345678901234567000`, `1.0` vira `1`, e `1e400` — além do maior double — vira `null`. Este conserva o texto literal de cada número: formatar muda a disposição e mais nada.
Por que uma chave repetida é erro?
Porque não existe resposta certa. A RFC 8259 diz que os nomes de um objeto *deveriam* ser únicos e deixa o comportamento indefinido quando não são: alguns analisadores ficam com o primeiro, a maioria com o último, outros recusam. Escolher em silêncio produziria um documento que já não diz o mesmo que você colou. A posição da segunda chave está na mensagem.
Consegue ler JSON com comentários ou vírgula final?
Não. Isso é JSON5 e JSONC, linguagens diferentes com o mesmo nome no arquivo. Aceitá-las aqui seria produzir uma saída que metade dos analisadores do mundo recusa. O erro dá a posição do caractere culpado.

Conversores relacionados