Cookies para estatística e publicidade
Usamos cookies de estatística e de publicidade, ambos enviados ao Google. Recusar não muda nada do que você vê.Ler a página de privacidade
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.
Até 100 arquivos de uma vez. Formatos misturados não são problema.
Eles são convertidos um após o outro e baixados juntos em um ZIP.
TOML para NDJSON
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.
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.
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.
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.
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.
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.
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.
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.
| TOML | NDJSON | |
|---|---|---|
| Nome completo | Tom's Obvious Minimal Language | Newline-Delimited JSON |
| Extensão do arquivo | .toml | .ndjson, .jsonl |
| Tipo de mídia | application/toml | application/x-ndjson |
| Publicado pela primeira vez | 2013 | 2013 |
| Especificação | TOML 1.0 | — |
| Licença | Padrão aberto | Padrão aberto |
| Situação hoje | Atual | Atual |
| Abre no navegador | Nenhum navegador | Nenhum navegador |
| Considerado no lugar | YAML, JSON, INI | JSON, CSV |
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.
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 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.
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.
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.
É. 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.
Não. NDJSON guarda o mesmo conteúdo sem jogar nada fora: o resultado é idêntico em qualidade ao original.
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 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.