# Formatador e Validador JSON

> Valide, formate, minifique e ordene JSON. Erros de análise apontam a linha, coluna e o caminho exatos; chaves duplicadas são sinalizadas; e números grandes são preservados exatamente. Roda inteiramente no seu navegador.

- Tool: https://ronutz.com/pt-BR/tools/json-formatter
- Family: Codificação e dados

---

## O que faz

Cole um JSON e a ferramenta o valida e, em seguida, o formata, minifica ou ordena. O que a distingue de um simples `JSON.parse` é o que ela informa quando algo está errado ou incomum: um erro de análise indica a linha, a coluna e o caminho exatos do problema; chaves de objeto repetidas são sinalizadas; e números muito grandes ou muito precisos são preservados exatamente, em vez de arredondados. Tudo roda no seu navegador.

## Um analisador feito para diagnóstico

O motor é um analisador escrito à mão que rastreia a posição enquanto lê, em vez de depender da análise nativa do runtime JavaScript. Isso traz três vantagens que importam na prática:

- **Erros precisos.** Quando a análise falha, você recebe a linha, a coluna, o deslocamento em bytes, uma mensagem em linguagem clara e o caminho JSON Pointer (RFC 6901) até o local, em vez de um único `SyntaxError` dependente do motor e sem caminho.
- **Detecção de chaves duplicadas.** A gramática JSON tecnicamente permite que um objeto repita uma chave, e o `JSON.parse` mantém silenciosamente apenas a última. Esse comportamento silencioso esconde bugs reais, então este motor relata cada duplicata que encontra, por caminho.
- **Números grandes exatos.** Números JSON não têm limite de tamanho, mas um número JavaScript é um ponto flutuante de 64 bits e perde precisão acima de 2^53. O formatador preserva os dígitos que você escreveu, de modo que um id de 20 dígitos ou um decimal de alta precisão não seja arredondado silenciosamente.

## Formatar, minificar e ordenar

Uma vez que o JSON é válido, você pode formatá-lo com indentação consistente, minificá-lo para a menor forma em linha única ou ordenar as chaves dos objetos para que dois documentos que diferem apenas na ordem das chaves fiquem alinhados para comparação. A ordenação é por chave e não reordena arrays, cuja ordem é significativa em JSON.

## Exemplos

- `{"b":1,"a":2}` ordenado por chave vira `{"a":2,"b":1}`.
- `{ "a": 1 }` minificado vira `{"a":1}`, com os espaços em branco removidos.
- `{"id":10000000000000001}` mantém todos os seus dígitos, enquanto uma ida e volta por um ponto flutuante de 64 bits o transformaria em `10000000000000000`.
- `{"a":1,"a":2}` é sinalizado pela chave duplicada `a`; um analisador comum manteria silenciosamente `2`.

## Como usar

Cole um documento JSON e escolha formatá-lo, minificá-lo ou ordená-lo. Se ele não for analisável, o erro aponta o ponto exato; se for analisável mas tiver chaves duplicadas ou números grandes demais, isso é destacado. A ferramenta é uma função pura da entrada, então o mesmo documento sempre dá o mesmo resultado.

## Standards and references

- [RFC 8259 - The JavaScript Object Notation (JSON) Data Interchange Format](https://www.rfc-editor.org/rfc/rfc8259) - the JSON grammar: value types, structural characters, strings, and numbers
- [ECMA-404 - The JSON Data Interchange Syntax](https://ecma-international.org/publications-and-standards/standards/ecma-404/) - the formal JSON syntax, equivalent to RFC 8259
- [RFC 6901 - JavaScript Object Notation (JSON) Pointer](https://www.rfc-editor.org/rfc/rfc6901) - the pointer path syntax used to locate errors and duplicate keys

## Related reading

- [A Gramática JSON: Seis Tipos e Algumas Regras Estritas](https://ronutz.com/pt-BR/learn/json-grammar.md): JSON é menor do que parece. O formato inteiro são seis tipos de valor e um punhado de caracteres estruturais, governados por regras mais estritas do que a maioria lembra: sem comentários, sem vírgulas finais e chaves que precisam ser strings entre aspas.
- [Chaves Duplicadas em JSON: Legais, Perigosas e Dignas de Detecção](https://ronutz.com/pt-BR/learn/json-duplicate-keys.md): A sintaxe JSON permite que a mesma chave apareça mais de uma vez em um objeto, mas a especificação não diz o que isso significa. Parsers diferentes resolvem isso de formas diferentes, o que torna chaves duplicadas uma fonte silenciosa de bugs e até de problemas de segurança.
- [Escapes de string e Unicode em JSON](https://ronutz.com/pt-BR/learn/json-string-escapes.md): Dentro de uma string JSON, alguns caracteres precisam ser escritos como escapes, e qualquer caractere pode ser escrito como \uXXXX. As regras são poucas mas estritas, e a que pega as pessoas é como caracteres além do plano básico, como emoji, precisam de um par substituto (surrogate pair).
- [Formatação, minificação e JSON canônico](https://ronutz.com/pt-BR/learn/json-formatting-and-canonical.md): O espaço em branco não muda o que o JSON significa, então JSON identado e minificado são o mesmo dado. Mas quando o JSON é assinado ou hasheado, os bytes exatos importam, e é aí que entra o JSON canônico: uma forma determinística de serializar o mesmo dado exatamente na mesma string toda vez.
- [Números JSON e a Armadilha da Precisão](https://ronutz.com/pt-BR/learn/json-numbers-and-precision.md): O JSON não impõe limite ao tamanho ou à precisão de um número, mas a maioria dos parsers converte silenciosamente todo número para um float de 64 bits. Essa incompatibilidade corrompe silenciosamente inteiros grandes e decimais exatos, e por isso um formatador deveria preservar os dígitos originais.
- [Vírgulas finais, comentários e a família JSON5](https://ronutz.com/pt-BR/learn/json-comments-and-trailing-commas.md): O JSON estrito não tem comentários nem vírgulas finais, o que surpreende quem usa um editor que aceita ambos. A razão é que o JSON é um formato mínimo de interchange, e as variantes tolerantes (JSONC, JSON5) são coisas separadas. Saber qual é qual evita arquivos de config que quebram em outra ferramenta.
