Comment convertir XML en JSON sur la ligne de commande

0
193
Shutterstock/VectorV

XML est compliqué, et son analyse nativement est assez difficile, même avec des langages de script. Heureusement, il existe un utilitaire capable de convertir XML en JSON, ce qui est plus facile à utiliser, à la fois dans les scripts et sur la ligne de commande.

Utilisez l'utilitaire xq

Vous voudrez utiliser un utilitaire personnalisé pour cela, plutôt que d'essayer de l'analyser avec quelque chose comme regex, ce qui est une mauvaise idée. Il existe un utilitaire appelé xq qui est parfait pour cette tâche. Il est installé à côté de yq, qui fonctionne pour YAML. Vous pouvez installer yq à partir de pip :

pip install yq

Sous le capot, cet utilitaire utilise jq pour gérer le travail avec JSON, vous devrez donc télécharger le binaire et le déplacer quelque part sur votre PATH (/usr/local/bin/ devrait fonctionner très bien).

Maintenant, vous pourrez analyser l'entrée XML en la redirigeant vers xq :

cat xml | xq.

Le . L'opérateur signifie que vous souhaitez convertir tout le XML en JSON. Vous pouvez en fait utiliser la syntaxe jq complète ici pour sélectionner des sous-éléments, sur lesquels vous pouvez lire notre guide.

Publicité

Vous pouvez également afficher la réponse de xq au format XML avec l'indicateur -x :

xq -x

Cela vous permet d'utiliser la syntaxe de sélection de jq pour analyser XML tout en le conservant sous forme XML. Bien qu'il ne semble pas pouvoir convertir dans l'autre sens, car xq souhaite toujours intégrer la syntaxe XML.

Un problème avec XML en JSON La conversion

XML en JSON n'est pas une conversion parfaite en XML, l'ordre des éléments peut être important et les clés peuvent être dupliquées. Un document comme :

<e> <a>certains</a> <b>textuel</b> <a>contenu</a> </e>

Produirait une erreur si elle était purement et simplement traduite en JSON, car la clé a existe deux fois. Ainsi, il est converti en un tableau, ce qui rompt l'ordre. xq renvoie la sortie suivante pour ce bit de XML :

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

Ce qui est techniquement correct, mais pas idéal dans toutes les situations. Vous voudrez vérifier et vous assurer que votre conversion XML ne pose aucun problème.