Converter JSON para TOML

Aqui você converte JSON para TOML de graça e sem conta: solte o arquivo acima e em poucos segundos o resultado está pronto para baixar. A conversão acontece dentro do seu próprio navegador, então o arquivo nunca é enviado. Funciona igual no Windows, no macOS e no Linux e também no iPhone e no Android, e continua funcionando mesmo se você cortar a conexão.

  • Onde roda No seu navegador. O arquivo nunca é enviado.
  • Sem perdas Nada é descartado. O TOML guarda exatamente o que o JSON guardava.
  • Limite de tamanho Até 100 MB por arquivo, de graça e sem conta.

Até 100 arquivos de uma vez. Formatos misturados não são problema.

O que o TOML oferece que um JSON de configuração não

JSON não tem comentário. Isso está na especificação, não é descuido, e é o motivo principal de configuração escrita em JSON ser desagradável de manter: o porquê de um timeout ser 45 segundos não pode morar ao lado do 45. TOML, que levou anos de versões 0.x até chegar à 1.0 em janeiro de 2021 e hoje é o formato de configuração do Cargo, do pyproject.toml e do Hugo, tem comentário — geralmente essa é a motivação inteira desta conversão.

O segundo motivo é a planificação. Uma configuração JSON com três níveis de profundidade é três níveis de chaves e muita indentação; a mesma coisa em TOML é uma linha de cabeçalho tipo [server.tls.client] e uma lista curta de chaves embaixo. Nada nos dados muda, mas o diff que um revisor vê quando um valor muda vira uma linha em vez de um bloco reindentado.

Um array JSON não tem lugar no topo de um arquivo TOML

Um documento TOML é uma tabela. Ele não pode começar com um array do jeito que um documento JSON pode, então um arquivo cujo primeiro caractere é um colchete não tem onde mapear. A conversão lida com isso em vez de falhar: um valor que não é objeto é embrulhado numa chave chamada items, e a saída começa com [[items]].

Isso mantém o arquivo válido, e é um espaço reservado, não uma resposta definitiva: nenhum conversor sabe se a ferramenta que vai ler o arquivo espera que essa lista se chame dependencies, servers ou plugins. Renomeie a chave na primeira linha e o resto do arquivo já está correto.

JSON null não tem equivalente em TOML, então desaparece

Este é o ponto que vale conferir sempre. TOML não tem literal de nulo, e o gravador não inventa um: uma chave cujo valor JSON era null simplesmente não é escrita. Converta {"a": null} e a saída é um arquivo vazio. Converta uma tabela com uma chave real e uma chave nula, e só a chave real aparece.

Se isso importa depende inteiramente da ferramenta que vai ler o resultado. Muitos leitores de configuração tratam uma chave ausente e uma chave nula do mesmo jeito. Outros distinguem, e ali a conversão mudou a configuração em silêncio. A defesa é buscar null no JSON antes de converter, em vez de comparar os dois arquivos depois.

Um array de objetos JSON vira um array de tabelas TOML

Isso costuma surpreender quem espera que TOML seja um formato mais fraco que JSON. Uma lista de registros é expressa pelo mesmo cabeçalho de tabela repetido: [[servers]] três vezes dá três servidores, cada um com suas próprias chaves embaixo. É mais verboso que um array JSON e bem mais fácil de editar, porque adicionar um quarto servidor significa copiar cinco linhas em vez de balancear colchetes.

Os membros não precisam ser iguais. Um array em que o primeiro objeto tem id e name e o segundo acrescenta region converte sem reclamar, e o TOML continua válido — cada bloco carrega as chaves que tem. É uma vantagem real sobre os alvos tabulares deste site, onde um array heterogêneo precisa ser reconciliado em um único conjunto de colunas.

Por que a saída TOML reordena suas chaves

Um cabeçalho de tabela TOML é dono de tudo que vem escrito abaixo até o próximo cabeçalho. Isso significa que uma chave simples colocada depois de [server] pertenceria a server, fosse qual fosse a intenção do autor. Então o gravador eleva todo valor de topo antes do primeiro cabeçalho de tabela.

A saída, portanto, não segue a ordem do seu JSON, e não poderia seguir: essa é a única reordenação que preserva o significado, e qualquer outra mudaria a qual tabela uma chave pertence. Se o agrupamento original importava para a leitura, restaure-o movendo blocos de tabela inteiros — isso é seguro — em vez de mover chaves individuais.

JSON aninhado profundo produz cabeçalhos TOML pontuados

Quatro níveis de aninhamento JSON viram uma única linha de cabeçalho: {"a":{"b":{"c":{"d":1}}}} converte para [a.b.c] com d = 1 embaixo. TOML expressa profundidade no cabeçalho em vez de na indentação, o que explica por que uma configuração profundamente estruturada costuma ficar mais curta e mais plana em TOML.

Isso também tem um limite de gosto, não de validade: um cabeçalho como [build.targets.linux.arm64.flags] é legal e ninguém gosta de ler. Se o arquivo convertido tiver cabeçalhos além de três ou quatro segmentos, geralmente é sinal de que a configuração merece ser dividida em arquivos ou ferramentas separadas.

Comentários TOML são o ponto, e a conversão não consegue escrevê-los

A saída não tem comentário nenhum, porque a entrada não tinha onde guardar um. JSON não carrega comentários, então não há nada para traduzir — isso não é uma falha do conversor, é o motivo pelo qual valeu a pena deixar o JSON de lado.

O que torna os primeiros cinco minutos depois de converter a parte mais valiosa do exercício: o arquivo TOML é a versão desta configuração capaz de guardar o conhecimento institucional sobre ela — quais valores são seguros de mudar, qual precisa bater com um valor em outro repositório. Escrever isso agora custa zero.

Datas continuam como texto, porque JSON nunca teve um tipo de data

TOML tem quatro tipos de data e hora, incluindo uma data-hora com fuso que é um valor de primeira classe, não uma string. JSON não tem nenhum: todo timestamp em todo arquivo JSON do mundo é uma string por convenção.

Então um valor JSON como "2024-01-01T00:00:00Z" é escrito como string TOML entre aspas, o que é correto e não é o que o formato poderia expressar. Se a ferramenta que vai ler o arquivo quer uma data-hora de verdade, remova as aspas à mão nessas linhas.

Conferindo o TOML antes de fazer commit

A checagem mais barata é uma ida e volta: converta o TOML de volta para JSON e compare com o que você começou. Chaves que tinham null vão estar ausentes, e nada mais deveria diferir.

A segunda checagem é a própria ferramenta. Cargo, Hugo e a maioria dos empacotadores Python avisam na hora se o documento não faz sentido para eles, e isso pega o que a ida e volta não pega: um arquivo corretamente convertido cuja chave de topo ainda se chama items porque ninguém a renomeou.

Onde a conversão de JSON para TOML roda

Nesta aba do navegador, no seu próprio processador. As duas metades são JavaScript — o leitor JSON é o que já vem no navegador, e o gravador TOML é uma biblioteca pequena carregada sob demanda — então nenhuma requisição carrega o arquivo para lugar nenhum, sem conta, sem fila.

Isso importa mais para configuração do que para a maioria dos dados. Um arquivo de configuração JSON é exatamente o tipo de coisa que guarda hostname interno, nome de bucket, conta de serviço e às vezes uma credencial que alguém esqueceu de remover, e enviá-lo a um conversor web seria a parte realmente contrária à política. Aqui não há nada para enviar.

Como converter JSON para TOML

  1. Solte o seu arquivo JSON nesta página, ou clique para escolher um.
  2. Escolha TOML como destino. A conversão acontece no seu navegador e o arquivo não é enviado.
  3. Baixe o arquivo TOML pronto.

JSON ou TOML: o que muda

JSON comparado com TOML
JSONTOML
Nome completoJavaScript Object NotationTom's Obvious Minimal Language
Extensão do arquivo.json.toml
Tipo de mídiaapplication/jsonapplication/toml
Publicado pela primeira vez20012013
EspecificaçãoRFC 8259TOML 1.0
LicençaPadrão abertoPadrão aberto
Situação hojeAtualAtual
Abre no navegadorTodos os navegadoresNenhum navegador
Considerado no lugarXML, YAML, NDJSONYAML, INI

O que se mantém

Nada é descartado. JSON e TOML guardam o conteúdo sem perda, então a conversão troca a embalagem e não a qualidade — e pode ser repetida sem que o estrago se acumule.

Abrir o resultado

Nenhum navegador lê TOML. É o menos portátil dos dois, então vale confirmar que o destinatário aceita antes de enviar.

Visual Studio Code lê tanto JSON quanto TOML, então dá para comparar o resultado com o original sem um segundo programa.

Para que serve cada formato

Os dois miram trabalhos diferentes: JSON em mover dados entre programas e a web, TOML em a edição. Vale pesar isso antes, porque o motivo de um existir costuma ser o motivo de o outro ser incômodo.

JSON foi publicado em 2001. Está descrito em RFC 8259, e vale conhecer se o arquivo precisa sobreviver à ferramenta que o escreveu.

TOML e de 2013, descrito em TOML 1.0. Visual Studio Code lê o formato.

De JSON para TOML: perguntas frequentes

Meu arquivo JSON é enviado para algum lugar?

Não. Esta conversão acontece inteiramente no seu navegador, então o arquivo não sai do seu aparelho. Você mesmo pode conferir: abra a aba de rede das ferramentas de desenvolvedor e converta alguma coisa. Você verá a própria página e as requisições de estatística e de publicidade com que este serviço é pago, e nenhuma que leve o seu arquivo.

Converter JSON para TOML é grátis?

É. Sem conta, sem marca d’água e sem cota diária para gastar: roda no seu próprio aparelho, então você pode voltar quantas vezes quiser. O navegador processa arquivos de até 100 MB, 100 por vez.

Perde qualidade ao converter JSON para TOML?

Não. TOML guarda o mesmo conteúdo sem jogar nada fora: o resultado é idêntico em qualidade ao original.

Um arquivo TOML abre no navegador?

Nenhum navegador lê TOML. É o menos portátil dos dois, então vale confirmar que o destinatário aceita antes de enviar.

A conversão de JSON para TOML é sem perda?

Nada é descartado. JSON e TOML guardam o conteúdo sem perda, então a conversão troca a embalagem e não a qualidade — e pode ser repetida sem que o estrago se acumule.

Mais sobre esses formatos