Conversor de JSON para TOML

TOML é o formato de configuração que você encontra no Cargo, pyproject, uv, poetry e uma crescente pilha de ferramentas de CLI. Este conversor pega um documento JSON e emite TOML válido: tabelas com cabeçalhos [section], tabelas aninhadas com chaves pontuadas, arrays de tabelas para arrays JSON de objetos e citação adequada para strings que contêm caracteres especiais.

Como converter JSON para TOML

  1. 1

    Cole o JSON

    Objeto no nível superior (TOML não pode representar um array no nível superior).

  2. 2

    Escolha o estilo da tabela

    Tabelas inline para objetos pequenos, cabeçalhos padrão `[section]` para os maiores.

  3. 3

    Escolha a versão do TOML

    TOML 1.0 é a especificação amplamente suportada; 1.1 ainda é um rascunho, mas adiciona alguns recursos.

  4. 4

    Copie o TOML

    Cole no seu arquivo `.toml`, Cargo, pyproject, uv, poetry ou qualquer configuração que aceite TOML.

Exemplo

Entrada:

{
  "project": { "name": "my-app", "version": "1.0.0" },
  "dependencies": { "django": "4.2", "redis": "^5.0" },
  "servers": [
    { "host": "h1.example.com", "port": 443 },
    { "host": "h2.example.com", "port": 443 }
  ]
}

Saída:

[project]
name = "my-app"
version = "1.0.0"

[dependencies]
django = "4.2"
redis = "^5.0"

[[servers]]
host = "h1.example.com"
port = 443

[[servers]]
host = "h2.example.com"
port = 443

Mapeamento de tipos

JSON TOML
cadeia "quoted" (ou 'literal' para strings sem caracteres especiais)
inteiro 42
número 3.14
booleano true / false
null Não representável, TOML não tem null (omita a chave)
data ISO 1979-05-27 (data local TOML)
data/hora ISO 1979-05-27T07:32:00Z
array do mesmo tipo [1, 2, 3]
array misto Ainda permitido, menos convencional
array de objetos [[name]] ... array de tabelas
objeto cabeçalho [section] ou inline

Convenções específicas do TOML

  • As tabelas não devem conflitar: uma chave não pode ser tanto um valor quanto um cabeçalho de tabela no mesmo documento.
  • Array de tabelas usa colchetes duplos: [[servers]] significa “iniciar um novo elemento do array servers”.
  • Chaves pontuadas permitem que você escreva project.author.name = "..." sem criar um cabeçalho de tabela.
  • Comentários começam com # e são apenas de linha.

Tratamento de null

TOML não tem null. Opções:

  • Omitir a chave, mais semântico, se “ausente” for equivalente a “null”.
  • Substituir por uma string vazia, bom se a string vazia nunca for um valor válido.
  • Usar um valor sentinela, "__null__" ou similar, interpretado pelo seu código.

O conversor omite chaves nulas por padrão e avisa ao fazê-lo.

Erros comuns

  • Array JSON no nível superior. [1, 2, 3] na raiz do JSON não pode se tornar um documento TOML válido, envolva-o em um objeto como { "items": [1, 2, 3] }.
  • Misturando cabeçalhos de tabela com atribuições inline. Uma vez que você escreve [project], cada chave subsequente nessa seção pertence a project até o próximo cabeçalho.
  • Chaves com caracteres especiais. "api-key" está bom (entre aspas), mas api-key sem aspas é um erro de análise TOML.
  • Assumindo que a ordem é preservada. Os analisadores TOML geralmente preservam a ordem dos cabeçalhos dentro das tabelas, mas a ordem das chaves dentro de uma tabela não é garantida em todas as implementações.

Perguntas frequentes

TOML é projetado para ser editado por humanos, comentários, sem regras de vírgula pedantes, seções. JSON é projetado para troca entre máquinas. Ecossistemas de ferramentas (Cargo, pyproject) escolheram TOML por um motivo.

TOML não tem null. O conversor omite chaves com valores nulos por padrão (e registra quais). Se você precisar de um sentinela, substitua os nulos no seu JSON primeiro.

Não diretamente, documentos TOML devem ser uma tabela (objeto) na raiz. Envolva seu array em um objeto ({ "items": [...] }) e o conversor produzirá um array de tabelas [[items]].

Sim. A saída segue TOML 1.0, que é o que ambas as ferramentas usam. Para quaisquer extensões específicas de ferramentas (por exemplo, subseções tool.poetry), organize o JSON de acordo e o conversor preservará a aninhamento.

Ferramentas relacionadas

Ferramenta disponível em outros idiomas