Convertir XML en JSON à l'aide de Python?
J'ai vu une juste part de déhanchée XML->code JSON sur le web, et ayant interagi avec Pile utilisateurs pour un peu, je suis convaincu que cette foule peut aider plus que les quelques premières pages de résultats de Google peut.
Donc, nous faisons l'analyse d'un flux d'informations météorologiques, et nous avons besoin pour remplir les widgets météo sur une multitude de sites web. Nous cherchons maintenant en Python à base de solutions.
Ce public weather.com flux RSS est un bon exemple de ce que nous serions d'analyse (notre weather.com aliment contient des informations supplémentaires en raison d'un partenariat w/eux).
En un mot, comment devrions-nous convertir XML en JSON à l'aide de Python?
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de "one-to-one" mappage entre XML et JSON, donc le passage de l'un à l'autre nécessite une certaine compréhension de ce que vous voulez ne avec les résultats.
Cela étant dit, Python standard library a plusieurs modules pour l'analyse de XML (y compris les DOM, SAX, et ElementTree). Comme de Python 2.6, le soutien pour la conversion de Python structures de données vers et à partir de JSON est inclus dans le
json
module.Si l'infrastructure est là.
xmltodict (divulgation complète: je l'ai écrit) peut vous aider à convertir votre fichier XML dict+liste+la structure de la chaîne, à la suite de cette "standard". Il est Expat, donc il est très rapide et n'a pas besoin de charger la totalité de l'arborescence XML en mémoire.
Une fois que vous avez la structure de données, vous pouvez sérialiser JSON:
Vous pouvez utiliser le xmljson bibliothèque pour les convertir à l'aide de différents XML JSON conventions.
Par exemple, ce XML:
traduit par la BadgerFish convention dans cette:
et via le GData convention dans ce (les attributs ne sont pas pris en charge):
... et par la Parker convention dans ce (les attributs ne sont pas pris en charge):
Il est possible de convertir du XML en JSON et de JSON en XML en utilisant la même
conventions:
Divulgation: j'ai écrit cette bibliothèque. Espérons qu'il aidera les futurs chercheurs.
Voici le code que j'ai construit pour cela. Il n'y a pas d'analyse du contenu, de la simple conversion.
Si peu de temps, vous obtenez uniquement les code de réponse au lieu de toutes les données puis erreur comme json analyser sera là si u besoin pour le convertir en texte
Il existe une méthode pour le transport de balisage basé sur XML en JSON qui lui permet d'être sans perte de nouveau converti en sa forme originale. Voir http://jsonml.org/.
C'est une sorte de XSLT de JSON. J'espère que vous le trouverez utile
Vous voudrez peut-être avoir un coup d'oeil à http://designtheory.org/library/extrep/designdb-1.0.pdf. Ce projet commence avec un XML en JSON de la conversion d'une grande bibliothèque de fichiers XML. Il y avait beaucoup de recherche faite dans la conversion et la plus intuitive simple XML -> JSON cartographie a été produit (il est décrit au début du document). En résumé, tout convertir un objet JSON, et de mettre en répétant les blocs comme une liste d'objets.
du sens aux objets de paires clé/valeur (dictionnaire en Python, hashmap en Java, objet en JavaScript)
Il n'existe pas de cartographie de retour à XML pour obtenir un document identique, la raison en est, il est inconnu si une paire clé/valeur est un attribut ou un
<key>value</key>
, donc l'information est perdue.Si vous me demandez, les attributs sont un hack pour commencer; puis, de nouveau, ils ont bien travaillé pour HTML.
Bien, sans doute la façon la plus simple est juste parse le XML dans les dictionnaires et puis sérialiser qu'avec simplejson.
Je vous suggère de ne pas aller pour une conversion directe. Convertir XML à un objet, à partir de l'objet JSON.
À mon avis, ce qui donne un nettoyeur de définition de la façon dont le XML et JSON correspondent.
Il faut du temps pour obtenir le droit et vous pouvez même écrire des outils pour vous aider avec la génération de certains, mais il devrait ressembler à peu près à ceci:
Que j'ai trouvé pour XML simple, les cisailles, utiliser l'expression régulière permettrait de sauver des ennuis. Par exemple:
De le faire par l'analyse de XML, comme @Dan a dit, il n'en est pas un pour tous, la solution, car les données sont différentes. Ma suggestion est d'utiliser lxml. Bien que pas fini d'en json, lxml.objectiver donner tranquille de bons résultats:
Tandis que le haut-libs pour l'analyse XML sont assez bon, je suis partielle de lxml.
Mais pour l'analyse des flux RSS, je vous recommande Universel D'Alimentation De L'Analyseur, qui peut également analyser l'Atome.
Son principal avantage est qu'il peut digérer encore plus mal formé flux.
Python 2.6 comprend déjà un parser JSON, mais plus récent version avec une amélioration de la vitesse est disponible en simplejson.
Avec ces outils, la construction de votre application ne devrait pas être difficile.
Quand je fais n'importe quoi avec XML, python, j'ai presque toujours utiliser le lxml paquet. Je soupçonne que la plupart des gens utilisent lxml. Vous pouvez utiliser xmltodict, mais vous aurez à payer la pénalité de parser le XML de nouveau.
Pour convertir du XML en json avec lxml vous:
- Je utiliser la classe suivante dans mes projets. Utiliser la méthode toJson.
La sortie par le haut dans principal est:
Qui est une transformation de ce xml:
À toute personne qui peut encore avoir besoin de cela. Voici un nouveau code simple pour faire cette conversion.
jsonpickle ou si vous utilisez feedparser, vous pouvez essayer de feed_parser_to_json.py
Ma réponse adresses spécifiques (et quelque peu fréquent) cas où vous n'avez pas vraiment besoin de convertir l'ensemble de xml en json, mais ce que vous avez besoin est de traverser/accéder à des parties spécifiques de l'xml, et vous en avez besoin pour être rapide, et simple (en utilisant json/dict des opérations de type).
Approche
Pour cela, il est important de noter que l'analyse d'un xml à l'aide du programme etree
lxml
est super rapide. La partie lente dans la plupart des autres réponses est la deuxième passe: de la traversée du programme etree structure (généralement en python-terre), de la convertir en json.Ce qui m'amène à l'approche que j'ai trouvé de mieux pour ce cas: analyse d'un xml à l'aide de
lxml
, puis enrouler le programme etree nœuds (paresseusement), en leur fournissant un dict-comme l'interface.Code
Voici le code:
Cette mise en œuvre n'est pas complète, par exemple, il n'est pas correctement prise en charge des cas où un élément a à la fois du texte et des attributs, ou à la fois du texte et des enfants (seulement parce que je n'ai pas besoin de lui quand je l'ai écrit...), Il devrait être facile de l'améliorer, si.
Vitesse
Dans mon cas d'utilisation spécifiques, où j'avais besoin de traiter uniquement les éléments spécifiques de l'xml, cette approche a donné un surprenant et frappant de l'accélération d'un facteur 70 (!) par rapport à l'utilisation de @Martin Blech est xmltodict et puis, traversant le dict directement.
Bonus
Comme un bonus, puisque notre structure est déjà dict-comme, nous obtenons une autre variante de mise en œuvre de
xml2json
gratuitement. Nous avons juste besoin de passer nos dict-comme la structure dejson.dumps
. Quelque chose comme:Si votre xml contient des attributs, vous devez utiliser certains alphanumérique
attr_prefix
(par exemple, "ATTR_"), pour s'assurer que les clés sont json valide clés.Je n'ai pas comparé la présente partie.
json.dumps(tree)
il dit Objet de type "ETreeDictWrapper" n'est pas la sérialisation JSONCe genre de choses ici, est activement maintenu et pour l'instant mon préféré est: xml2json en python
découvrez lxml2json (divulgation: je l'ai écrit)
https://github.com/rparelius/lxml2json
il est très rapide, léger (seulement exige lxml), et un avantage, c'est que vous avez plus de contrôle si certains éléments sont convertis à des listes ou des dicts
Vous pouvez utiliser declxml. Il dispose de fonctionnalités avancées comme les multi-attributs complexes et imbriqués de soutien. Vous avez juste besoin d'écrire un simple processeur pour elle. Aussi avec le même code, vous pouvez le transformer à nouveau en JSON ainsi. C'est assez simple, et la documentation est génial.
Lien: https://declxml.readthedocs.io/en/latest/index.html
Préparer les données dans Python:
Pour créer JSON vous devez d'abord préparer les données en python. Nous pouvons utiliser la Liste et le Dictionnaire en Python pour préparer les données.
Python Liste <==> JSON Tableau
Python Dictionnaire <==> JSON Objet (Valeur de la Clé de Format)
Cochez cette pour plus de détails
https://devstudioonline.com/article/create-json-and-xml-in-python
Pour représenter les données dans JSON format
HTML:
Dans json nous repesent de données dans une clé et une valeur de format
HTML:
Pour représenter les données dans XML format
HTML: