100 % local — seus dados nunca saem do seu navegador

TOML para JSON — IDs longos sobrevivem exatos

Converta TOML em JSON. Os inteiros grandes mantêm cada algarismo e as datas o fuso: a configuração chega ao seu código como foi escrita.

Instantâneo Privado Zero cookies
Indentação

Entrada TOML

Saída JSON

O que esta ferramenta faz

Um documento TOML vira JSON. As tabelas aninham, e os [[arrays de tabelas]] viram arrays.

title = "Demo"

[server]
host = "localhost"
port = 8080
{
  "title": "Demo",
  "server": {
    "host": "localhost",
    "port": 8080
  }
}

As chaves pontuadas aninham do mesmo jeito: a.b.c = 1 te dá {"a": {"b": {"c": 1}}}.

Os inteiros grandes, intactos

snowflake = 1096285471735640155
{
  "snowflake": 1096285471735640155
}

O TOML pede inteiros com sinal de 64 bits, e um número JavaScript só guarda 53 exatos. O analisador respondia ao documento inteiro com “integer value cannot be represented losslessly” — um arquivo TOML legal, recusado por causa de um identificador. Agora os algarismos viajam como algarismos: o JSON é escrito por um serializador sem perda, o mesmo que em todo este site mantém os números grandes intactos. Era um defeito real, encontrado ao escrever esta página e corrigido.

inf e nan são nomeados, não anulados

rate = inf
JSON has no infinity: "rate" is inf

O TOML tem inf, -inf e nan; o JSON não tem nenhum dos três, e o JSON.stringify escreve todos como null. Uma taxa infinita virava uma taxa ausente, e nada no resultado dizia isso. A ferramenta agora para no valor e nomeia a chave que o carrega, assim como já recusa um null no caminho de volta ao TOML. O que pôr no lugar — uma string, um número muito grande, nenhuma chave — é uma decisão sobre os seus dados, não uma leitura.

O que o JSON não tem

  • Um tipo data. 1979-05-27T00:32:00-07:00 vira a string "1979-05-27T00:32:00.000-07:00". O fuso é mantido; os milissegundos são escritos mesmo quando a fonte não os tinha.
  • Dois tipos de número. O TOML separa inteiro de float, o JSON tem um número só: 1.0 chega como 1. Converta de volta e você terá um inteiro onde escreveu um float.
  • Comentários. Eles documentam o arquivo, não os dados, e não há onde colocá-los.

Um arquivo que começa com uma marca de ordem de bytes — o invisível U+FEFF que os editores do Windows gostam de acrescentar — era recusado com uma mensagem sobre os caracteres permitidos numa chave, apontando para um caractere que não se vê. Agora ela é removida antes da leitura.

Privado por padrão

Tudo é executado localmente no seu navegador com JavaScript. Os seus dados nunca são enviados para um servidor, o que torna a ferramenta segura para conteúdo sensível e funciona offline.

Perguntas frequentes

Os inteiros de 64 bits passam?
Sim, desde que esta página foi escrita. O TOML exige inteiros com sinal de 64 bits, e o analisador recusava o documento inteiro assim que um deles passava do que um número JavaScript guarda exato: “integer value cannot be represented losslessly”. Um id do Discord ou um carimbo de tempo em nanossegundos bastava para rejeitar um arquivo perfeitamente legal. Agora os algarismos passam um a um, porque o JSON é escrito por um serializador sem perda, não pelo do JavaScript.
O que acontece com `inf` e `nan`?
A conversão para e nomeia a chave. O TOML tem três floats especiais, o JSON não tem nenhum, e o `JSON.stringify` escreve todos como `null` — uma taxa infinita virava, caladamente, uma taxa ausente. Nomear a chave deixa a decisão onde ela deve ficar: uma string, um número muito grande, nenhuma chave — quem escolhe é você.
E as datas?
Saem como strings ISO 8601, com o fuso incluído, porque o JSON não tem tipo data. Um detalhe que vale saber: os milissegundos são escritos mesmo quando você não os escreveu, então `07:32:00` chega como `07:32:00.000`. O instante é o mesmo; o texto não.

Conversores relacionados