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 XML 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.
XML para NDJSON
JSON delimitado por linha precisa de algo para dividir, e a divisão aqui acontece num array no topo dos dados interpretados. Interpretar XML nunca produz um: o resultado é sempre um objeto com uma chave só, o nome do elemento raiz, guardando tudo mais. Um valor entra, uma linha sai.
Isso vale mesmo que o arquivo seja grande e contenha muitos elementos repetidos. Uma exportação de 40 MB com dez mil registros converte numa única linha de 40 MB. Nada é perdido e nada é dividido, e se o que você precisava era dez mil linhas, esta conversão não fez isso.
A rota que funciona são dois passos. Converta o arquivo para JSON, depois passe por jq: selecione o caminho carregando o elemento repetido, itere, e use a flag de saída compacta para que cada objeto fique na própria linha. É um comando só, é repetível num script, e coloca a escolha do que conta como registro onde ela pertence — com você.
Nenhum conversor consegue fazer essa escolha a partir do documento sozinho. Num feed RSS o registro é o elemento item; numa resposta SOAP pode ser uma linha três níveis dentro do body; num extrato bancário é o que o fornecedor decidiu chamar de transação.
Este não é um par sem uso. Se suas entradas são muitos documentos XML pequenos em vez de um grande — um diretório de faturas, uma pasta de manifestos, um lote de payloads por evento — então uma linha por arquivo é precisamente o formato que um carregador quer.
Também funciona para inventário. Converter cada arquivo de configuração num repositório e anexar as linhas dá um conjunto de dados consultável sobre o que esses arquivos contêm.
Mesmo depois de você dividir os registros, um comportamento XML os segue. Um elemento repetido vira um array só quando se repete: um registro contendo um elemento tag produz uma string, e um registro contendo dois produz uma lista de strings.
Um armazenamento de esquema na leitura vai inferir um tipo a partir dos primeiros registros que vê e depois rejeitar ou converter à força o resto. O conserto pertence à passagem de jq em vez de ao carregador: normalize todo campo que pode se repetir em array conforme você emite cada linha.
JSON compacto sem indentação, chaves na ordem do documento, terminado por uma quebra de linha. Atributos aparecem como chaves prefixadas com @ e texto de elemento numa tag que também tem atributos aparece sob #text. Um prefixo de namespace fica dentro do nome da chave, então soap:Body é uma chave com dois-pontos nela.
Essas duas últimas valem remover antes de uma carga. Nomes de campo contendo dois-pontos e ponto de interrogação são incômodos ou inválidos em bastante motor de consulta e esquema de tabela, e a declaração é metadado sobre o arquivo em vez de dado dele.
Valores que parecem numéricos são interpretados, tanto em atributos quanto em texto de elemento. Isso é conveniente para uma contagem e destrutivo para identificadores: uma referência de pedido escrita 007 chega como o número 7, e um atributo de versão escrito 1.0 chega como 1.
Um caso se comporta melhor do que se poderia temer: um inteiro longo demais para sobreviver como número JSON é deixado como string em vez de arredondado, então uma referência de dezenove dígitos chega intacta. Notação científica não recebe essa proteção — um valor escrito 1e3 chega como 1000.
NDJSON é lido diretamente por jq, por pandas com sua opção de linhas, e como formato de carga pelos carregadores de data warehouse comuns. Bulk do Elasticsearch precisa de uma linha de ação antes de cada documento, acrescentada na mesma passagem de jq.
O que vale planejar com este par especificamente é o comprimento da linha. Um leitor que processa uma linha por vez precisa segurar a linha inteira em memória, então uma linha de documento inteiro é um buffer de documento inteiro.
Se a exportação é grande, chega regularmente, e precisa virar um fluxo toda vez, a recomendação honesta não é um conversor de navegador de jeito nenhum. Um interpretador XML em streaming lê um arquivo elemento por elemento sem montar a árvore inteira em memória.
Essa abordagem também sobrevive a arquivos maiores que memória, o que nada nesta página faz — a interpretação aqui monta o documento inteiro como objetos JavaScript antes de um único byte ser escrito. Para um arquivo único, o conversor é mais rápido que escrever o programa.
Comentários XML são descartados durante a interpretação e NDJSON não tem sintaxe de comentário para recebê-los, então qualquer documentação dentro da exportação se foi. Também não há cabeçalho, esquema nem preâmbulo: toda linha num arquivo NDJSON é um registro.
Se a carga precisa registrar de onde os dados vieram, isso pertence a um campo no registro ou ao nome do arquivo. Acrescentar como primeira linha torna o arquivo inválido para seu propósito.
| XML | NDJSON | |
|---|---|---|
| Nome completo | Extensible Markup Language | Newline-Delimited JSON |
| Extensão do arquivo | .xml | .ndjson, .jsonl |
| Tipo de mídia | application/xml | application/x-ndjson |
| Publicado pela primeira vez | 1998 | 2013 |
| Publicado por | W3C | — |
| Especificação | XML 1.0 | — |
| Licença | Padrão aberto | Padrão aberto |
| Situação hoje | Atual | Atual |
| Abre no navegador | Todos os navegadores | Nenhum navegador |
| Considerado no lugar | JSON, YAML | JSON, CSV |
Os comentários não sobrevivem. XML 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.
Nenhum navegador lê NDJSON. É o menos portátil dos dois, então vale confirmar que o destinatário aceita antes de enviar.
Os programas de sempre não se cruzam: XML abre em Visual Studio Code e oXygen XML Editor, e NDJSON em jq e pandas, então quem receber o resultado precisa de algum do segundo grupo.
XML é o formato da W3C, publicado em 1998. Está descrito em XML 1.0, e vale conhecer se o arquivo precisa sobreviver à ferramenta que o escreveu.
NDJSON e de 2013. jq e pandas leem o formato.
XML foi publicado em 1998 e NDJSON em 2013. O mais antigo costuma ser o arquivo mais seguro para entregar; o mais novo faz o mesmo com menos bytes.
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.
XML e NDJSON descrevem o conteúdo de maneiras radicalmente diferentes. A conversão é, portanto, uma reconstrução e não uma cópia: fiel, mas não idêntica byte a byte. Atributos e nós de texto do XML viram ambos chaves, e essa é uma decisão que o conversor toma por você.
Nenhum navegador lê NDJSON. É o menos portátil dos dois, então vale confirmar que o destinatário aceita antes de enviar.
Os comentários não sobrevivem. XML 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.