J'ai vu une bonne part de code XML-> JSON disgracieux sur le Web, et après avoir interagi avec les utilisateurs de Stack pendant un moment, je suis convaincu que cette foule peut aider plus que les premières pages de résultats Google.
Nous analysons donc un flux météo, et nous devons remplir des widgets météo sur une multitude de sites Web. Nous examinons maintenant des solutions basées sur Python.
Ce flux RSS public de weather.com est un bon exemple de ce que nous analyserions ( notre flux actuel de weather.com contient des informations supplémentaires en raison d'un partenariat avec eux ).
En un mot, comment devrions-nous convertir XML en JSON en utilisant Python?
xmltodict (divulgation complète: je l'ai écrit) peut vous aider à convertir votre XML en une structure dict + liste + chaîne, suivant ce "standard" . Il est basé sur Expat , donc il est très rapide et n'a pas besoin de charger l'arborescence XML entière en mémoire.
Une fois que vous avez cette structure de données, vous pouvez la sérialiser en JSON:
la source
bs4
puissiez faire le travail de xml pour dicter, il est extrêmement facile d'utiliser la bibliothèqueVous pouvez utiliser la bibliothèque xmljson pour convertir à l'aide de différentes conventions XML JSON .
Par exemple, ce XML:
se traduit par la convention BadgerFish en ceci:
et via la convention GData dans ceci (les attributs ne sont pas pris en charge):
... et via la convention Parker dans ceci (les attributs ne sont pas pris en charge):
Il est possible de convertir de XML en JSON et de JSON en XML en utilisant les mêmes conventions:
Divulgation: j'ai écrit cette bibliothèque. J'espère que cela aidera les futurs chercheurs.
la source
Si un certain temps vous n'obtenez que le code de réponse au lieu de toutes les données, une erreur comme json parse sera donc là, vous devez donc le convertir en texte
la source
Voici le code que j'ai construit pour cela. Il n'y a pas d'analyse du contenu, juste une simple conversion.
la source
Il existe une méthode pour transporter le balisage XML au format JSON qui lui permet d'être reconverti sans perte dans sa forme d'origine. Voir http://jsonml.org/ .
C'est une sorte de XSLT de JSON. J'espère que cela vous aidera
la source
À tous ceux qui peuvent encore en avoir besoin. Voici un nouveau code simple pour effectuer cette conversion.
la source
Vous voudrez peut-être jeter un œil à http://designtheory.org/library/extrep/designdb-1.0.pdf . Ce projet commence par une conversion XML vers JSON d'une grande bibliothèque de fichiers XML. De nombreuses recherches ont été effectuées sur la conversion, et le mappage XML -> JSON intuitif le plus simple a été produit (il est décrit au début du document). En résumé, convertissez tout en un objet JSON et mettez des blocs répétitifs sous forme de liste d'objets.
objets signifiant paires clé / valeur (dictionnaire en Python, hashmap en Java, objet en JavaScript)
Il n'y a pas de mappage vers XML pour obtenir un document identique, la raison en est qu'on ne sait pas si une paire clé / valeur était un attribut ou un
<key>value</key>
, donc cette information est perdue.Si vous me demandez, les attributs sont un hack pour commencer; là encore, ils ont bien fonctionné pour HTML.
la source
Eh bien, le moyen le plus simple est probablement d'analyser le XML dans des dictionnaires et de le sérialiser avec simplejson.
la source
Je suggérerais de ne pas opter pour une conversion directe. Convertissez XML en objet, puis de l'objet en JSON.
À mon avis, cela donne une définition plus claire de la correspondance entre XML et JSON.
Il faut du temps pour bien faire et vous pouvez même écrire des outils pour vous aider à en générer une partie, mais cela ressemblerait à peu près à ceci:
la source
J'ai trouvé pour de simples extraits XML, utiliser une expression régulière éviterait des problèmes. Par exemple:
Pour le faire par analyse XML, comme l'a dit @Dan, il n'y a pas de solution unique car les données sont différentes. Ma suggestion est d'utiliser lxml. Bien que n'étant pas fini avec json, lxml.objectify donne de bons résultats:
la source
Bien que les bibliothèques intégrées pour l'analyse XML soient assez bonnes, je suis partial pour lxml .
Mais pour analyser les flux RSS, je recommanderais Universal Feed Parser , qui peut également analyser Atom. Son principal avantage est qu'il peut digérer même les aliments les plus mal formés.
Python 2.6 inclut déjà un analyseur JSON, mais une version plus récente avec une vitesse améliorée est disponible en tant que simplejson .
Avec ces outils, la création de votre application ne devrait pas être si difficile.
la source
Ma réponse aborde le cas spécifique (et quelque peu courant) où vous n'avez pas vraiment besoin de convertir le xml entier en json, mais ce dont vous avez besoin est de parcourir / accéder à des parties spécifiques du xml, et vous en avez besoin pour être rapide , et simple (en utilisant des opérations de type json / dict).
Approche
Pour cela, il est important de noter que l'analyse d'un xml vers etree en utilisant
lxml
est super rapide. La partie lente dans la plupart des autres réponses est la deuxième passe: traverser la structure etree (généralement en python-land), la convertir en json.Ce qui m'amène à l'approche que j'ai trouvée la meilleure pour ce cas: analyser le XML en utilisant
lxml
, puis envelopper les nœuds etree (paresseusement), en leur fournissant une interface de type dict.Code
Voici le code:
Cette implémentation n'est pas complète, par exemple, elle ne prend pas en charge proprement les cas où un élément a à la fois du texte et des attributs, ou à la fois du texte et des enfants (uniquement parce que je n'en avais pas besoin lorsque je l'ai écrit ...) Cela devrait être facile pour l'améliorer, cependant.
La vitesse
Dans mon cas d'utilisation spécifique, où je devais seulement des éléments spécifiques du processus du xml, cette approche a donné une surprenante et speedup frappe par un facteur de 70 (!) Par rapport à l' utilisation de @ Martin Blech de xmltodict puis traversant le dict directement.
Prime
En prime, comme notre structure est déjà de type dict, nous obtenons une autre implémentation alternative de
xml2json
gratuitement. Nous avons juste besoin de passer notre structure de type dict àjson.dumps
. Quelque chose comme:Si votre xml inclut des attributs, vous devez utiliser des caractères alphanumériques
attr_prefix
(par exemple "ATTR_"), pour vous assurer que les clés sont des clés json valides.Je n'ai pas évalué cette partie.
la source
json.dumps(tree)
il dit que l' objet de type 'ETreeDictWrapper' n'est pas sérialisable JSONQuand je fais quoi que ce soit avec XML en python, j'utilise presque toujours le package lxml. Je soupçonne que la plupart des gens utilisent lxml. Vous pouvez utiliser xmltodict mais vous devrez payer la pénalité pour analyser à nouveau le XML.
Pour convertir XML en json avec lxml, vous:
J'utilise la classe suivante dans mes projets. Utilisez la méthode toJson.
La sortie du main intégré est:
Qui est une transformation de ce xml:
la source
jsonpickle ou si vous utilisez feedparser, vous pouvez essayer feed_parser_to_json.py
la source
Ce truc ici est activement maintenu et jusqu'à présent est mon préféré: xml2json en python
la source
consultez lxml2json (divulgation: je l'ai écrit)
https://github.com/rparelius/lxml2json
c'est très rapide, léger (ne nécessite que lxml), et l'un des avantages est que vous avez le contrôle sur la conversion de certains éléments en listes ou en dictionnaires
la source
Vous pouvez utiliser declxml. Il possède des fonctionnalités avancées telles que des attributs multiples et une prise en charge imbriquée complexe. Il vous suffit d'écrire un processeur simple pour cela. Également avec le même code, vous pouvez également reconvertir en JSON. C'est assez simple et la documentation est géniale.
Lien: https://declxml.readthedocs.io/en/latest/index.html
la source
Préparer les données en Python : pour créer JSON, vous devez d'abord préparer les données en python. Nous pouvons utiliser List et Dictionary en Python pour préparer les données.
Liste Python <==> Tableau JSON
Dictionnaire Python <==> Objet JSON (format de valeur clé) Cochez cette case pour plus de détails
https://devstudioonline.com/article/create-json-and-xml-in-python
la source
Pour représenter des données au format JSON
Dans json, nous représentons une donnée au format clé et valeur
Pour représenter des données au format XML
la source