Come convertire XML in JSON sulla riga di comando

Shutterstock/VectorV

XML è complicato e analizzarlo in modo nativo è abbastanza difficile, anche con i linguaggi di scripting. Fortunatamente, esiste un’utilità in grado di convertire XML in JSON, con cui è più facile lavorare, sia negli script che nella riga di comando.

Usa l’utilità xq

Ti consigliamo di utilizzare un’utilità personalizzata per questo, piuttosto che provare ad analizzarla con qualcosa come regex, che è una cattiva idea. C’è un’utilità chiamata xq che è perfetto per questo compito. È installato a fianco yq, che funziona per YAML. Puoi installare yq da pip:

pip install yq

Sotto il cofano, questa utility usa jq per gestire il lavoro con JSON, quindi dovrai scarica il binario, e spostalo da qualche parte sul tuo PERCORSO (/usr/local/bin/ dovrebbe funzionare bene).

Ora sarai in grado di analizzare l’input XML tramite pipe in xq:

cat xml | xq .

Il . operatore significa che vuoi convertire tutto l’XML in JSON. Puoi effettivamente usare il pieno jq sintassi qui per selezionare i sottoelementi, su cui puoi leggere la nostra guida.

Puoi anche produrre xqla risposta di come XML con il -x bandiera:

xq -x

Questo ti permette di usare jqsintassi di selezione per analizzare XML mantenendolo in formato XML. Anche se non sembra essere in grado di convertirsi nell’altro modo, come xq vuole ancora la sintassi XML.

Un problema con la conversione da XML a JSON

Da XML a JSON non è una conversione perfetta: in XML, l’ordine degli elementi può essere importante e le chiavi possono essere duplicate. Un documento come:


  some
  textual
  content

Produrrebbe un errore se tradotto direttamente in JSON, perché il a la chiave esiste due volte. Quindi, viene convertito in un array, che interrompe l’ordine. xq restituisce il seguente output per quel bit di XML:

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

Il che è tecnicamente corretto, ma non è l’ideale in tutte le situazioni. Ti consigliamo di ricontrollare e assicurarti che la tua conversione XML non abbia problemi.