FreeToGenerate.com

Roda inteiramente no seu navegador — nada do que você colar é enviado a lugar nenhum.

Experimente

Analisado nesta aba contra o TOML v1.0.0; nada é enviado. O analisador tira 210 de 210 no próprio conjunto de testes de conformidade da especificação.

O que a conversão perdeu

Nada se perdeu.

Todos os valores deste documento têm um equivalente em JSON que significa o mesmo. Nem sempre é assim: os exemplos acima incluem casos em que não é.

Também disponível em: English · Español · Français · العربية

Converter TOML para JSON

Cole TOML, receba JSON e veja exatamente quais valores o JSON não conseguiu carregar.

O que é um conversor de TOML para JSON?

TOML é um formato de configuração pensado para ser óbvio para quem o lê: seções entre colchetes, chaves e valores separados por um sinal de igual, e nenhum espaço em branco significativo para errar. É o que o Cargo do Rust, o pyproject.toml do Python e muitas outras ferramentas usam. JSON é o que os programas passam uns aos outros. Um conversor transforma um no outro, e este faz isso no seu navegador.

A conversão não é uma simples troca de rótulos, e é aí que está o interessante. O TOML distingue mais tipos de valor do que cabem no JSON, então alguma informação é destruída na travessia. A maioria dos conversores faz isso em silêncio. Este lista cada valor que precisou achatar e em que caminho ele estava, para você decidir se isso importa antes que a saída vá a qualquer lugar.

O analisador é conferido contra o próprio conjunto de conformidade do projeto TOML: 210 documentos válidos que devem produzir um resultado exato e 499 que devem ser recusados. Ele analisa todos os 210 corretamente e recusa todos os 499 que consegue de fato enxergar — as seis exceções são documentos com bytes UTF-8 inválidos, que nenhum analisador lendo um campo de texto do navegador pode encontrar.

Como converter TOML para JSON

  1. Cole o seu TOML. Qualquer coisa válida no TOML v1.0.0: tabelas, arrays de tabelas, tabelas em linha, chaves com pontos, strings de várias linhas. Os botões de exemplo carregam um de cada caso interessante.
  2. Leia o JSON. Ele aparece na hora, com recuo de dois espaços, e há um botão para copiar. Se o documento não analisar, você recebe a regra que foi quebrada e a linha e a coluna em que isso aconteceu.
  3. Confira o painel de perdas abaixo. Ele nomeia cada valor que o JSON não conseguiu representar fielmente, com o caminho. Num arquivo de configuração comum ele diz que nada se perdeu, e isso é uma medição e não um consolo.

O que o JSON não consegue carregar

O TOML tem quatro tipos distintos de data e hora. Uma data-hora com deslocamento fixa um instante; uma data-hora local não tem deslocamento; uma data local é um dia sem hora; uma hora local é uma hora sem dia. Os quatro são valores de primeira classe com sintaxe própria. O JSON não tem tipo de data nenhum, então os quatro chegam como strings entre aspas, indistinguíveis de uma string que apenas se parece com uma data. Carregue o segundo exemplo acima e o painel nomeia os quatro.

O TOML também separa inteiros de decimais, e o JSON não. Isso tem duas consequências. Um decimal escrito 1.0 sai como 1 e já não se distingue do inteiro ao lado. E um inteiro de 64 bits — o TOML garante a faixa completa com sinal — não sobrevive: os números do JavaScript só são exatos até cerca de nove quatrilhões, então 9223372036854775807 volta como 9223372036854776000. O terceiro exemplo mostra as duas coisas.

A prova mais clara de que isto é um problema real e não uma implicância é o próprio conjunto de testes do projeto TOML. As saídas esperadas dele não são JSON comum: cada valor escalar vem embrulhado num objeto que carrega o seu tipo, com oito etiquetas diferentes. Quem escreveu os testes de conformidade também não conseguiu expressar os valores do TOML em JSON, então inventou uma codificação que diz o que cada valor é. O painel de perdas deste conversor é a mesma confissão, feita onde você pode agir sobre ela.

Por que aqui não há um botão de JSON para TOML

A direção contrária tem um problema sem solução honesta, e vale dizer isso em vez de escondê-lo atrás de um recurso pela metade. O TOML não tem null. Não existe forma de escrevê-lo em lugar algum da gramática — nem palavra-chave, nem valor vazio, nada. Uma chave ou tem valor ou está ausente.

Então um documento JSON que contenha null não pode ser convertido. As opções são remover a chave, o que muda em silêncio o significado do documento, ou escrever algo que pareça null e na verdade seja a string de quatro letras, o que é pior. Nenhuma das duas é uma conversão. Uma ferramenta que ofereça o botão tem de escolher uma e normalmente não conta qual.

Há problemas menores na mesma direção — o JSON admite uma chave vazia e arrays de formatos misturados que a sintaxe de tabelas do TOML não expressa com clareza — mas o null é o que não tem resposta alguma. Se você precisa ir por esse caminho, o honesto é decidir antes o que esses nulls significam na sua configuração, porque só você sabe.

Outras coisas que vale saber

O TOML é mais rígido do que parece, e este analisador segue isso. Uma chave não pode ser definida duas vezes, uma tabela não pode ser reaberta por um segundo cabeçalho, e uma tabela em linha fica fechada assim que é escrita — então uma [seção] posterior não consegue acrescentar nada a ela. As datas são validadas em vez de transbordarem, então 2026-02-30 é um erro e não 2 de março. Inteiros não aceitam zeros à esquerda. Cada uma dessas regras é testada pelo conjunto de conformidade, e cada uma é um bug real evitado num arquivo de configuração.

Comentários e formatação não sobrevivem. O JSON não tem sintaxe de comentário, então tudo que vem depois de um # some, junto com as suas linhas em branco, a ordem das suas chaves dentro de uma tabela e a sua escolha de aspas. Isso é inerente ao formato de destino e não uma falha da ferramenta, e é por isso que converter para JSON uma configuração mantida à mão costuma ser uma viagem só de ida.

O analisador aceita o TOML v1.0.0, a versão publicada. O rascunho 1.1.0, ainda inacabado, acrescenta coisas que aqui não são aceitas — vírgulas finais em tabelas em linha, entre outras — e isso é proposital: um conversor que aceita um rascunho que ninguém publicou vai ler alegremente arquivos que as ferramentas reais recusam.

Por que é grátis?

A análise e a conversão acontecem as duas no seu navegador. Nada do que você cola é enviado, registrado ou guardado — fechar a aba é toda a exclusão necessária. Aqui isso importa, porque arquivos de configuração são justamente o tipo de coisa que carrega um nome de host, um caminho ou uma chave que você preferiria não entregar ao servidor de um desconhecido.

Sem conta, sem cadastro, sem limite de tamanho e sem marca d'água em nada que você copiar.