Como converter XML em JSON na linha de comando

Conteúdo

XML é complicado e analisá-lo nativamente é bastante difícil, mesmo com linguagens de script. Por sorte, existe um utilitário que pode converter XML em JSON, aquele que é mais fácil de trabalhar, tanto em scripts quanto na linha de comando.

Use o utilitário xq

Você vai querer usar um utilitário personalizado para isso, em vez de tentar analisá-lo com algo como regex, o que é uma má ideia. Existe um utilitário chamado xq o que é perfeito para esta tarefa. É instalado junto yq, que funciona para YAML. Você pode instalar yq o pip:

pip install yq

Underhood, este utilitário usa jq para lidar com o trabalho com JSON, então deve baixe o binário, e mova-o para algum lugar da sua ROTA (/usr/local/bin/ deve funcionar bem).

Agora, você poderá analisar a entrada XML canalizando-a para xq:

gato xml | porque .

a . operador significa que você deseja converter todos os XML em JSON. Na realidade, você pode usar completo jq sintaxe aqui para escolher subelementos, onde você pode ler nosso guia.

Também pode gerar xqA solução como XML com o -x bandeira:

xq -x

Isso permite que você use jqseleção de sintaxe para analisar XML, mantendo-o no formato XML. Mesmo que você não consiga converter para trás, O que xq ainda deseja a sintaxe XML no formato.

Um roadblock com a conversão de XML em JSON

XML para JSON não é uma conversão perfeita; en XML, a ordem dos itens pode ser importante e as chaves podem ser duplicadas. Um documento como:

<e>
  <uma>algum</uma>
  <b>textual</b>
  <uma>contente</uma>
</e>

Ele geraria um erro se traduzido diretamente para JSON, porque o a A chave existe duas vezes. Então, torna-se uma matriz, o que quebra a ordem. xq retorna a próxima saída para aquele bit de XML:

{
  "e": {
    "uma": [
      "algum",
      "contente"
    ],
    "b": "textual"
  }
}

O que é tecnicamente correto, mas não é ideal em todas as situações. Você vai querer verificar novamente e certificar-se de que sua conversão XML é tranquila.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.