1 Escolha o trabalho
Linguagem O palpite é só um ponto de partida, e corrigir é um clique.
Ordenar as chaves de cada objeto Pelo jeito que as chaves se leem, e não pelos pontos de código delas, então item2 vem antes de item10. Só em JSON.
Nome do elemento externo XML tem um elemento só lá no topo e JSON não, então é preciso inventar um.
2 Cole aqui
3 Leve o resultado
# Formatador de JSON — deixe arrumado, comprima ou converta
JSON, XML, HTML, CSS e YAML, formatados ou convertidos. Nada é colado no servidor de ninguém.
> Formate e minifique JSON, XML, HTML, CSS e YAML, e converta JSON para YAML ou XML e de volta. Os analisadores rodam no seu navegador e nada é enviado: um token ou um arquivo de configuração nunca sai do seu computador.
Esta é uma ferramenta interativa de navegador em https://abox.tools/pt/formatar-json/. Os arquivos são processados no dispositivo que executa esse navegador. Compartilhamento deliberado e funções opcionais de rede são explicados na página. A seguir está sua explicação escrita; abra o endereço para usá-la.
## Seus texto e código são **processados no navegador**. Sem envio para processamento.
Formatar e converter são aritmética sobre uma string, feita aqui, nesta página. Os analisadores são escritos à mão e ficam em `src/`: `shared/parse-json.js`, `shared/parse-xml.js`, `css.js`, `shared/parse-yaml.js`; e não há mais nada. Esta ferramenta não tem função de rede de espécie alguma, nada para buscar e nada para mandar, e isso pesa aqui mais do que em quase qualquer outro lugar deste site: o que as pessoas colam num formatador são tokens de acesso, cookies de sessão, cadastros de clientes e código ainda não lançado.
- ✗ Sem envio
- ✗ Sem conta
- ✗ Sem limite de tamanho
- ✓ Funciona offline
- ✓ Código aberto
## Como formatar ou converter JSON sem enviá-lo
1. **Escolha o trabalho.** Duas abas, uma caixa só: *Formatar* arruma ou comprime JSON, XML, HTML, CSS e YAML; *Converter* transforma JSON em YAML ou XML e de volta. O texto que você acabou de formatar é o texto que você converte, sem colar duas vezes.
2. **Cole, ou solte o arquivo.** Qualquer coisa que você consiga selecionar e copiar serve. Um arquivo solto no seletor é lido pelo seu próprio navegador e vai para a caixa: aqui não existe etapa de envio para pular.
3. **Deixe que ele descubra a linguagem, ou diga qual é.** O menu diz como ele leu o texto, e corrigir é um clique. Um palpite é só um ponto de partida, e é por isso que ele aparece em vez de ser aplicado caladinho.
4. **Escolha a indentação, ou esprema tudo.** Dois espaços, quatro, ou uma tabulação. Espremer é o mesmo documento com todo espaço que só estava lá para leitura retirado, e o resultado diz quantos bytes isso economizou.
5. **Leia o erro onde o erro está.** Um analisador que falha aqui diz o que encontrou e em que linha e coluna, em vez de “token inesperado na posição 4193”. Em geral isso basta para consertar um arquivo de configuração sem abrir mais nada.
6. **Leve o resultado.** Copie, ou baixe como arquivo, com o nome da linguagem em que ele saiu.
## A versão longa
[Como formatar JSON sem entregar para ninguém](https://abox.tools/pt/guias/formatar-json/): Como identar, conferir e minificar JSON no seu próprio navegador: o que um formatador nunca deve mudar no seu arquivo, como ler a mensagem de erro, e por que importa a caixa em que você cola.
## Também na caixa
- [Conversor de YAML para JSON](https://abox.tools/pt/converter-yaml-para-json/): Os dois sentidos, e ele diz o que cada um custa. Nada disso é colado no servidor de outra pessoa.
- [Formatador de XML](https://abox.tools/pt/formatar-xml/): XML organizado para ler ou espremido para publicar, e convertido em JSON nos dois sentidos. Nada disso é colado no servidor de outra pessoa.
- [Comparador de textos](https://abox.tools/pt/comparar-textos/): Dois textos entram, cada diferença sai marcada, linha a linha e palavra por palavra. Nada é colado no servidor de ninguém.
- [Codificador e decodificador Base64](https://abox.tools/pt/codificar-base64/): Base64, codificação percentual, entidades HTML, hexadecimal e escapes com barra invertida, nos dois sentidos. Nada é colado no servidor de ninguém.
## Perguntas
### O meu texto é enviado para algum lugar?
Não. Cada analisador e cada escritor desta página é uma função que roda no seu próprio navegador, no seu próprio hardware. Esta ferramenta não tem função de rede de espécie alguma: nunca busca nada e nunca manda nada, e a `Content-Security-Policy` da página lista todo endereço que ela pode contatar, e nenhum deles é nosso. É esse o motivo para usá-la com um token de acesso, um cookie de sessão ou um cadastro de cliente: colar uma dessas coisas no formatador de outra pessoa é entregá-la a ela.
### Formatar JSON muda alguma coisa além do layout?
Não, e isso é mais difícil do que parece. As chaves mantêm a ordem em que você escreveu: um formatador construído em cima do `JSON.parse` move caladinho para a frente as chaves parecidas com inteiros, então `{"10":a,"2":b}` volta como `{"2":b,"10":a}`. Os números mantêm os dígitos que você digitou, então um id de vinte dígitos não perde os três últimos para um double e `1e999` não vira `null`. Chaves repetidas ficam as duas, porque o padrão não diz qual vence e descartar uma seria escolher no seu lugar.
### Quais linguagens ele formata?
JSON, XML, HTML, CSS e YAML. JSON, XML, HTML e CSS também podem ser espremidos; YAML não, porque a forma curta dele é o estilo de fluxo, que é ilegível, e ilegível é o oposto do motivo pelo qual se mantém um arquivo em YAML. JavaScript ficou de fora de propósito: veja a pergunta sobre isso mais abaixo.
### Por que ele não formata JavaScript, Python ou SQL?
Porque arrumar uma linguagem de programação significa analisá-la direito, e um formatador que acerta quase tudo é pior do que nenhum: ele produz código que parece certo e faz outra coisa. JSON, XML, CSS e YAML têm gramáticas pequenas o bastante para serem lidas à mão e conferidas com testes que você pode rodar. Um formatador de JavaScript é o Prettier, que é um megabyte de analisador, e o lugar dele é no seu editor, não numa página web.
### Meu YAML diz no e o JSON saiu como string. Por quê?
Porque é uma string, e aqui se lê YAML 1.2 e não 1.1. No YAML 1.1, `yes`, `no`, `on` e `off` eram booleanos, que é o famoso bug que transforma o código de país da Noruega em `false`. O YAML 1.2 tirou isso, e esta ferramenta também: só `true`, `false`, `null` e `~` são lidos como outra coisa que não texto. No sentido inverso, essas palavras são escritas de volta *entre aspas*, mesmo que aqui elas fossem lidas como texto sem as aspas, porque o que abrir o arquivo depois talvez não leia. O PyYAML ainda usa 1.1 por padrão. Ler com rigor e escrever com prudência é a única combinação que dá certo nos dois sentidos.
### O que se perde ao converter YAML para JSON?
Os comentários, porque JSON não tem onde colocar um. Âncoras, aliases e tags são recusados de cara em vez de adivinhados: cada um deles diz algo que o JSON não sabe dizer, e um conversor que escolhesse caladinho uma interpretação te entregaria um documento que não é o que o arquivo dizia. No outro sentido não se perde nada: todo documento JSON já é um documento YAML.
### O que se perde ao converter JSON para XML?
A diferença entre um objeto vazio, um array vazio e uma string vazia, que viram todos um elemento vazio, e o tipo de cada valor, porque XML não tem tipos, que é por isso que a conversão inversa deixa tudo como string em vez de decidir que `8080` era um número. Um array vira um elemento repetido, que é o único formato que se lê de volta, e uma chave que um nome de elemento não comporta tem os caracteres inconvenientes substituídos, em vez de sair um documento que analisador nenhum vai ler.
### Reindentar HTML muda a aparência da página?
Pode mudar, e aqui isso é dito com honestidade. O espaço entre dois elementos inline é um espaço entre duas palavras, então mexer nele não sai de graça. Duas coisas seguram isso: `<pre>` e `<textarea>` são copiados exatamente como estavam, e um elemento que só contém texto fica numa linha só. Todo o resto é arrumado.
### De que tamanho pode ser o arquivo?
Aqui não tem limite definido, porque não existe servidor pagando por um. O teto de verdade é o seu próprio computador: alguns megabytes de JSON vão bem, e num documento muito longo a página espera uma pausa na sua digitação antes de reformatar, em vez de brigar com você pelo teclado.
### É grátis, e preciso de conta?
É grátis, e não tem conta, nem login, nem período de teste, nem limite de quanto você cola. O site exibe publicidade, e é ela que paga a conta; os anúncios não recebem nada sobre o seu texto.
### Funciona offline?
Funciona. Carregue a página uma vez, depois desligue a internet e ela continua funcionando. Esse é também o jeito mais simples de provar que nada está sendo enviado: uma ferramenta que mandasse o seu texto embora para ser formatado pararia no instante em que você tirasse da tomada.
## Como dá para conferir a promessa de privacidade
- **O processamento acontece neste navegador.** A ferramenta processa entradas e resultados no navegador. Seu código não os envia para processamento. Content-Security-Policy limita recursos e destinos, mas hosts permitidos podem receber solicitações: ela não inspeciona o conteúdo nem prova sozinha que nada é enviado. Compare código e solicitações da operação ou conclua a operação local desconectado.
- **Aqui nada busca nada.** Não existe em lugar nenhum de `src/` um `fetch`, um `XMLHttpRequest` ou um `sendBeacon`. Cada analisador e cada escritor são funções desta página que recebem uma string e devolvem uma string.
- **Os formatadores mantêm o que receberam.** Um objeto JSON volta com as chaves na ordem em que você escreveu e com os números grafados do jeito que você grafou, porque `src/shared/parse-json.js` é um analisador e não uma chamada de `JSON.parse`, que reordena as chaves parecidas com inteiros e transforma um id de vinte dígitos no double mais próximo. Os testes em `tests/js/text-format.test.js` conferem exatamente isso.
- **O que o Google carrega, e o que não chega até ele.** Os scripts de publicidade e de medição vêm do Google, e o botão de doação vem do Buy Me a Coffee. Nenhum deles recebe um caractere do seu texto. Toda linha que o lê, analisa ou escreve é servida desta origem e está listada no repositório.
- **Funciona offline.** Desligue a rede e a ferramenta continua igualzinha, porque nunca houve uma etapa de rede nela. Essa é a prova mais simples de todas.
**Confira você mesmo.** Nada do que está acima precisa ser aceito na fé. Esta página é gerada a partir dos modelos e da configuração do repositório por um script de compilação que você pode ler e rodar por conta própria, e o resultado vai para a branch `dist`. Ou seja, dá para comparar o que é servido com o que uma compilação das fontes produz: https://github.com/A-Box-of-Tools/website
Os primeiros arquivos que valem a leitura são `config/site.toml` para a Content-Security-Policy, `src/shared/parse-json.js` para o analisador que mantém as suas chaves na ordem em que você escreveu, e `src/convert.js` para entender por que uma conversão é um analisador e um escritor, sem nada no meio que conheça os dois formatos ao mesmo tempo.
Como formatar ou converter JSON sem enviá-lo
- Escolha o trabalho. Duas abas, uma caixa só: Formatar arruma ou comprime JSON, XML, HTML, CSS e YAML; Converter transforma JSON em YAML ou XML e de volta. O texto que você acabou de formatar é o texto que você converte, sem colar duas vezes.
- Cole, ou solte o arquivo. Qualquer coisa que você consiga selecionar e copiar serve. Um arquivo solto no seletor é lido pelo seu próprio navegador e vai para a caixa: aqui não existe etapa de envio para pular.
- Deixe que ele descubra a linguagem, ou diga qual é. O menu diz como ele leu o texto, e corrigir é um clique. Um palpite é só um ponto de partida, e é por isso que ele aparece em vez de ser aplicado caladinho.
- Escolha a indentação, ou esprema tudo. Dois espaços, quatro, ou uma tabulação. Espremer é o mesmo documento com todo espaço que só estava lá para leitura retirado, e o resultado diz quantos bytes isso economizou.
- Leia o erro onde o erro está. Um analisador que falha aqui diz o que encontrou e em que linha e coluna, em vez de “token inesperado na posição 4193”. Em geral isso basta para consertar um arquivo de configuração sem abrir mais nada.
- Leve o resultado. Copie, ou baixe como arquivo, com o nome da linguagem em que ele saiu.
A versão longa
Como formatar JSON sem entregar para ninguém Como identar, conferir e minificar JSON no seu próprio navegador: o que um formatador nunca deve mudar no seu arquivo, como ler a mensagem de erro, e por que importa a caixa em que você cola.
Também na caixa
Perguntas
O meu texto é enviado para algum lugar?
Não. Cada analisador e cada escritor desta página é uma função que roda no seu próprio navegador, no seu próprio hardware. Esta ferramenta não tem função de rede de espécie alguma: nunca busca nada e nunca manda nada, e a Content-Security-Policy da página lista todo endereço que ela pode contatar, e nenhum deles é nosso. É esse o motivo para usá-la com um token de acesso, um cookie de sessão ou um cadastro de cliente: colar uma dessas coisas no formatador de outra pessoa é entregá-la a ela.
Formatar JSON muda alguma coisa além do layout?
Não, e isso é mais difícil do que parece. As chaves mantêm a ordem em que você escreveu: um formatador construído em cima do JSON.parse move caladinho para a frente as chaves parecidas com inteiros, então {"10":a,"2":b} volta como {"2":b,"10":a}. Os números mantêm os dígitos que você digitou, então um id de vinte dígitos não perde os três últimos para um double e 1e999 não vira null. Chaves repetidas ficam as duas, porque o padrão não diz qual vence e descartar uma seria escolher no seu lugar.
Quais linguagens ele formata?
JSON, XML, HTML, CSS e YAML. JSON, XML, HTML e CSS também podem ser espremidos; YAML não, porque a forma curta dele é o estilo de fluxo, que é ilegível, e ilegível é o oposto do motivo pelo qual se mantém um arquivo em YAML. JavaScript ficou de fora de propósito: veja a pergunta sobre isso mais abaixo.
Por que ele não formata JavaScript, Python ou SQL?
Porque arrumar uma linguagem de programação significa analisá-la direito, e um formatador que acerta quase tudo é pior do que nenhum: ele produz código que parece certo e faz outra coisa. JSON, XML, CSS e YAML têm gramáticas pequenas o bastante para serem lidas à mão e conferidas com testes que você pode rodar. Um formatador de JavaScript é o Prettier, que é um megabyte de analisador, e o lugar dele é no seu editor, não numa página web.
Meu YAML diz no e o JSON saiu como string. Por quê?
Porque é uma string, e aqui se lê YAML 1.2 e não 1.1. No YAML 1.1, yes, no, on e off eram booleanos, que é o famoso bug que transforma o código de país da Noruega em false. O YAML 1.2 tirou isso, e esta ferramenta também: só true, false, null e ~ são lidos como outra coisa que não texto. No sentido inverso, essas palavras são escritas de volta entre aspas, mesmo que aqui elas fossem lidas como texto sem as aspas, porque o que abrir o arquivo depois talvez não leia. O PyYAML ainda usa 1.1 por padrão. Ler com rigor e escrever com prudência é a única combinação que dá certo nos dois sentidos.
O que se perde ao converter YAML para JSON?
Os comentários, porque JSON não tem onde colocar um. Âncoras, aliases e tags são recusados de cara em vez de adivinhados: cada um deles diz algo que o JSON não sabe dizer, e um conversor que escolhesse caladinho uma interpretação te entregaria um documento que não é o que o arquivo dizia. No outro sentido não se perde nada: todo documento JSON já é um documento YAML.
O que se perde ao converter JSON para XML?
A diferença entre um objeto vazio, um array vazio e uma string vazia, que viram todos um elemento vazio, e o tipo de cada valor, porque XML não tem tipos, que é por isso que a conversão inversa deixa tudo como string em vez de decidir que 8080 era um número. Um array vira um elemento repetido, que é o único formato que se lê de volta, e uma chave que um nome de elemento não comporta tem os caracteres inconvenientes substituídos, em vez de sair um documento que analisador nenhum vai ler.
Reindentar HTML muda a aparência da página?
Pode mudar, e aqui isso é dito com honestidade. O espaço entre dois elementos inline é um espaço entre duas palavras, então mexer nele não sai de graça. Duas coisas seguram isso: <pre> e <textarea> são copiados exatamente como estavam, e um elemento que só contém texto fica numa linha só. Todo o resto é arrumado.
De que tamanho pode ser o arquivo?
Aqui não tem limite definido, porque não existe servidor pagando por um. O teto de verdade é o seu próprio computador: alguns megabytes de JSON vão bem, e num documento muito longo a página espera uma pausa na sua digitação antes de reformatar, em vez de brigar com você pelo teclado.
É grátis, e preciso de conta?
É grátis, e não tem conta, nem login, nem período de teste, nem limite de quanto você cola. O site exibe publicidade, e é ela que paga a conta; os anúncios não recebem nada sobre o seu texto.
Funciona offline?
Funciona. Carregue a página uma vez, depois desligue a internet e ela continua funcionando. Esse é também o jeito mais simples de provar que nada está sendo enviado: uma ferramenta que mandasse o seu texto embora para ser formatado pararia no instante em que você tirasse da tomada.