Cómo convertir XML a JSON en la línea de comandos

Contenidos

XML es complicado y analizarlo de forma nativa es bastante difícil, inclusive con lenguajes de scripting. Por suerte, existe una utilidad que puede convertir XML a JSON, con la que es más fácil trabajar, tanto en scripts como en la línea de comandos.

Utilice la utilidad xq

Querrá utilizar una utilidad personalizada para esto, en lugar de intentar analizarla con algo como regex, que es una mala idea. Hay una utilidad llamada xq que es perfecto para esta tarea. Está instalado junto yq, que funciona para YAML. Puedes instalar yq de pip:

pip install yq

Bajo el capó, esta utilidad utiliza jq para manejar el trabajo con JSON, por lo que deberá descargar el binario, y muévelo a algún lugar de tu RUTA (/usr/local/bin/ debería funcionar bien).

Ahora, podrá analizar la entrada XML canalizándola en xq:

cat xml | xq .

los . operador significa que desea convertir todo el XML a JSON. En realidad, puedes utilizar full jq sintaxis aquí para elegir subelementos, en los que puede leer nuestra guía.

Además puede generar xqLa solución como XML con el -x bandera:

xq -x

Esto te posibilita utilizar jqde selección de sintaxis para analizar XML mientras se mantiene en formato XML. Aún cuando no parece poder realizar la conversión al revés, como xq aún quiere sintaxis XML en formato.

Un obstáculo con la conversión de XML a JSON

XML a JSON no es una conversión perfecta; en XML, el orden de los ítems puede ser importante y las claves se pueden duplicar. Un documento como:

<e>
  <a>some</a>
  <b>textual</b>
  <a>content</a>
</e>

Produciría un error si se tradujera de forma directa a JSON, debido a que el a La clave existe dos veces. Entonces, se convierte en una matriz, lo que rompe el orden. xq devuelve la próxima salida para ese bit de XML:

{
  "e": {
    "a": [
      "some",
      "content"
    ],
    "b": "textual"
  }
}

Lo cual es técnicamente correcto, pero no ideal en todas las situaciones. Querrá volver a verificar y asegurarse de que su conversión XML no tenga problemas.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.