Converter TOML para NDJSON

Aqui você converte TOML para NDJSON 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 NDJSON guarda exatamente o que o TOML 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.

Um arquivo de configuração, uma linha, e por que essa é a unidade certa

Um documento TOML é uma tabela. Não existe arquivo TOML que seja uma lista no nível raiz — a especificação não permite — então a fronteira de registro que o NDJSON precisa nunca aparece dentro de um único arquivo. O documento inteiro vira uma linha.

Para a maioria das origens isso seria uma limitação. Aqui é a forma do problema: ninguém quer um pyproject.toml dividido em fragmentos, e todo mundo que converte um para NDJSON está construindo uma coleção onde cada arquivo é um registro. A unidade do formato e a unidade da pergunta coincidem, o que não é verdade em todo par deste site.

Construindo um inventário de todo Cargo.toml num monorepo

O fluxo é: converta cada arquivo, anexe a linha a uma saída crescente. Como cada linha é um valor JSON completo e independente e nada envolve o arquivo — sem array externo, sem vírgulas entre registros — concatenar é toda a etapa de junção. Duas linhas de duas conversões são um NDJSON válido de dois registros.

O que isso dá é um conjunto de dados que você consegue consultar. Quais crates fixam uma versão específica de dependência, quais pacotes não declaram licença, quais repositórios ainda usam uma edição antiga — tudo isso vira uma consulta sobre a coleção em vez de um script que percorre diretórios e interpreta arquivos.

O campo que a conversão não consegue adicionar por você

Um registro sem origem é quase inútil num inventário. O conversor lê o conteúdo de um arquivo e nada mais — não sabe o caminho, o repositório nem o commit — então a linha que produz não tem campo dizendo de onde veio.

Adicione você mesmo, em um de dois momentos. Uma passada com jq durante a concatenação pode injetar uma chave de caminho por linha, mantendo os arquivos TOML intocados. Alternativamente, uma chave dentro de cada arquivo TOML o nomeia, o que sobrevive a toda conversão futura mas significa editar arquivos que pertencem a outras pessoas.

O que uma linha contém

JSON compacto: sem indentação, sem espaços depois de dois-pontos, chaves na ordem que o TOML declarou, terminando com uma quebra de linha. Tabelas viram objetos aninhados e arrays de tabelas viram arrays de objetos, então uma lista de autores ou um conjunto de alvos de build chega na forma que um motor de consulta espera.

A linha é tão longa quanto o config for. Um pyproject.toml tem alguns kilobytes e um config gerado ao lado de um lockfile pode ser bem maior, e um leitor que processa uma linha por vez precisa manter a linha inteira na memória. Isso raramente é problema em tamanho de config, mas vale saber.

Valores tipados atravessando para um fluxo

TOML tem tipos temporais reais e JSON não, então toda data e data-hora vira string. Deslocamentos de fuso sobrevivem em vez de ser normalizados para UTC, uma data local chega exatamente como escrita, e uma hora local ganha um componente de milissegundo que não tinha na origem.

Dois literais de ponto flutuante têm perda de um jeito que nada relata: inf e nan são TOML válido e viram null em JSON, então um limite infinito configurado e um não configurado ficam indistinguíveis no conjunto de dados. A distinção entre inteiro e float também se perde, já que 1.0 serializa como 1.

O arquivo TOML que interrompe a conversão

TOML 1.0 exige inteiros de 64 bits assinados e números JSON são doubles IEEE, então um valor acima de aproximadamente nove quatrilhões não pode ser representado exatamente. O interpretador para com um erro nomeando a linha em vez de escrever um número arredondado no seu conjunto de dados.

Esse é o comportamento correto especialmente para um inventário, onde um número errado seria indistinguível de um certo entre dez mil registros. Quando isso acontecer, coloque o valor entre aspas como string no arquivo de origem — era um identificador, não uma quantidade, em todo caso real em que isso aparece.

Registros que não compartilham as mesmas chaves

Configs de projetos diferentes não vão ter as mesmas seções. Um declara uma tabela de ferramenta com três linters, o próximo não declara nenhuma, um terceiro usa uma chave que ninguém mais usa. Toda linha carrega só as chaves que seu arquivo tinha, uma vantagem real sobre achatar a mesma coleção numa tabela onde as colunas teriam que ser a união de tudo.

O destino decide quanto isso custa. Um banco com schema na leitura lida nativamente com registros irregulares. Um carregador com schema fixo vai rejeitar os casos fora do padrão ou descartar os campos. Amostre os arquivos mais largos e mais estreitos da coleção antes de definir o destino.

Quando um único arquivo JSON é a resposta melhor

Se você só tem um config para ler, converta para JSON em vez disso. JSON indentado é legível, o jq lida igual, e um arquivo de uma linha é pior para todo propósito exceto anexar. O NDJSON ganha seu espaço no ponto em que há muitos arquivos e eles estão indo para algum lugar.

A outra fronteira é recorrência. Se o inventário precisa ser reconstruído numa agenda, o trabalho pertence a um script que percorre a árvore, interpreta cada arquivo com uma biblioteca TOML de verdade e emite as linhas já com o caminho anexado. Este conversor é para construir o conjunto de dados pela primeira vez.

Como converter TOML para NDJSON

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

TOML ou NDJSON: o que muda

TOML comparado com NDJSON
TOMLNDJSON
Nome completoTom's Obvious Minimal LanguageNewline-Delimited JSON
Extensão do arquivo.toml.ndjson, .jsonl
Tipo de mídiaapplication/tomlapplication/x-ndjson
Publicado pela primeira vez20132013
EspecificaçãoTOML 1.0
LicençaPadrão abertoPadrão aberto
Situação hojeAtualAtual
Abre no navegadorNenhum navegadorNenhum navegador
Considerado no lugarYAML, JSON, INIJSON, CSV

O que se perde

Os comentários não sobrevivem. TOML permite anotar um arquivo e NDJSON não tem sintaxe para isso, então cada linha de explicação se perde — e isso atinge justamente os arquivos que se comentam: configuração que outra pessoa vai manter.

O que se mantém

Nada é descartado. TOML e NDJSON 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

Os programas de sempre não se cruzam: TOML abre em Visual Studio Code, e NDJSON em jq e pandas, então quem receber o resultado precisa de algum do segundo grupo.

Para que serve cada formato

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

TOML foi publicado em 2013. Está descrito em TOML 1.0, e vale conhecer se o arquivo precisa sobreviver à ferramenta que o escreveu.

NDJSON e de 2013. jq e pandas leem o formato.

De TOML para NDJSON: perguntas frequentes

Meu arquivo TOML é 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 TOML para NDJSON é 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 TOML para NDJSON?

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

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

Nada é descartado. TOML e NDJSON 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.

Os comentários sobrevivem de TOML para NDJSON?

Os comentários não sobrevivem. TOML permite anotar um arquivo e NDJSON não tem sintaxe para isso, então cada linha de explicação se perde — e isso atinge justamente os arquivos que se comentam: configuração que outra pessoa vai manter.

Mais sobre esses formatos