Utilia

Conversor de TOML para JSON

Converte TOML para JSON e JSON para TOML no teu navegador. Trata tabelas, arrays de tabelas, datas e inteiros de 64 bits. Nada é enviado.

Conversão

Como converter TOML para JSON

  1. Escolhe o sentido: TOML → JSON (a predefinição) ou JSON → TOML.
  2. Cola os teus dados ou clica em Abrir um ficheiro para carregar um ficheiro .toml ou .json (até 10 MB).
  3. Em TOML → JSON, escolhe a Indentação (2 ou 4 espaços) e decide se marcas Inteiros grandes como strings. Em JSON → TOML, mantém ou desmarca Omitir valores null.
  4. Marca Ordenar as chaves se quiseres todas as tabelas por ordem alfabética.
  5. O resultado atualiza-se enquanto escreves; Converter volta a executar a conversão quando quiseres. Os erros mostram a linha e a coluna do problema.
  6. Copia ou transfere o resultado. Inverter o sentido passa o resultado para a entrada, para o converteres de volta.

TOML e JSON lado a lado

O TOML (Tom’s Obvious Minimal Language) é o formato de configuração por trás do Cargo.toml em Rust, do pyproject.toml em Python, dos sites Hugo e Netlify e de muitas ferramentas de linha de comandos. Foi pensado para ser lido e editado por pessoas e corresponde diretamente a uma árvore ao estilo JSON de tabelas (objetos), arrays e valores.

[package]
name = "demo"
version = "0.1.0"

[[bin]]
name = "cli"

passa a

{"package": {"name": "demo", "version": "0.1.0"}, "bin": [{"name": "cli"}]}
  • Um cabeçalho [table] passa a um objeto JSON, e chaves com pontos como a.b.c = 1 passam a objetos aninhados.
  • Um array de tabelas, [[bin]], passa a um array JSON de objetos.
  • As tabelas em linha { x = 1 } e os arrays funcionam como esperas. Os comentários desaparecem, porque o JSON não os tem.

Onde os dois formatos diferem

Datas e horas. O TOML tem quatro tipos nativos de data e hora; o JSON não tem nenhum. O conversor escreve-os como strings ISO 8601 e mantém o tipo: uma data e hora com desvio fica 1979-05-27T07:32:00.000-08:00, uma data local fica 1979-05-27 e uma hora local fica 07:32:00.000. As frações de segundo são mantidas até ao milissegundo. Ao converter de volta para TOML obténs strings simples, porque nada no JSON as marca como datas.

Inteiros. Os inteiros TOML têm sinal e 64 bits, de −9 223 372 036 854 775 808 a 9 223 372 036 854 775 807. Os números JavaScript, usados pela maioria dos parsers JSON, só são exatos até 2^53 (9 007 199 254 740 991). Os inteiros TOML maiores são escritos com todos os algarismos, o que é JSON válido, mas um programa que os leia como doubles vai arredondá-los; marca Inteiros grandes como strings para o evitar. Um inteiro fora do intervalo de 64 bits é rejeitado, como exige a especificação TOML.

Floats especiais. inf, -inf e nan não têm forma em JSON, por isso são escritos como as strings "inf", "-inf" e "nan".

JSON → TOML. Um documento TOML é sempre uma tabela, por isso o JSON tem de ser um objeto no nível de topo. O TOML não tem null: por omissão, os valores null são omitidos e uma mensagem diz-te quantos foram; desmarca Omitir valores null para obteres antes um erro com a localização do primeiro. O JSON não distingue 1 de 1.0, por isso os números inteiros passam a inteiros TOML, e os números demasiado grandes para 64 bits passam a floats. Nos navegadores recentes, os inteiros grandes do teu JSON mantêm os algarismos exatos.

Perguntas frequentes

A minha configuração é enviada para algum lado?

Não. A conversão corre inteiramente no teu navegador, por isso as chaves de API ou os segredos dos teus ficheiros de configuração nunca saem do teu computador.

Porque é que a ordem das minhas chaves mudou no resultado TOML?

O TOML exige que os pares chave/valor simples venham antes das subtabelas em cada tabela, por isso o conversor escreve primeiro os valores, depois as [tables] e por fim os [[arrays of tables]]. Os dados são os mesmos.

Os comentários TOML são preservados?

Não. O JSON não tem comentários, por isso perdem-se na conversão TOML → JSON e não há nenhum para repor no sentido inverso.

Que versão do TOML é suportada?

O TOML 1.0, incluindo chaves com pontos, tabelas em linha, arrays de tabelas, inteiros hexadecimais, octais e binários e os quatro tipos de data e hora.

Porque é que a minha data é uma string em JSON?

O JSON não tem tipo de data. As strings ISO 8601 são a convenção habitual, e a maioria das linguagens consegue lê-las diretamente.