191 votes

Convertir XML en JSON avec Python ?

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 certain temps, je suis convaincu que cette foule peut aider plus que les premières pages de résultats de Google.

Nous analysons donc un flux météorologique et nous devons alimenter des widgets météorologiques sur une multitude de sites web. Nous envisageons maintenant des solutions basées sur Python.

Ce public flux RSS de weather.com est un bon exemple de ce que nous devrions analyser ( notre flux météo.com contient des informations supplémentaires en raison d'un partenariat avec eux ).

En bref, comment convertir XML en JSON en utilisant Python ?

0 votes

322voto

Martin Blech Points 5031

xmltodict (full disclosure : I wrote it) peut vous aider à convertir votre XML en une structure dict+list+string, en suivant ce qui suit "standard" . Il est Expatrié -Il est donc très rapide et n'a pas besoin de charger tout l'arbre XML en mémoire.

Une fois que vous avez cette structure de données, vous pouvez la sérialiser en JSON :

import xmltodict, json

o = xmltodict.parse('<e> <a>text</a> <a>text</a> </e>')
json.dumps(o) # '{"e": {"a": ["text", "text"]}}'

0 votes

@Martin Blech Si je crée un fichier json à partir de mon fichier de modèles django. Comment puis-je mapper mon fichier xml pour convertir le xml en json pour les champs obligatoires ?

1 votes

@sayth Je pense que vous devriez poster cette question en tant que question séparée.

0 votes

@Martin Blech. J'ai ajouté une question, mais il est assez difficile de la faire entrer dans SO, je suis un débutant et j'ai donc fourni autant d'informations que possible, mais je m'attends à ce que vous ayez besoin de plus de clarté. stackoverflow.com/q/23676973/461887

65voto

Dan Points 18831

Il n'existe pas de correspondance "un pour un" entre XML et JSON, de sorte que la conversion de l'un à l'autre nécessite nécessairement une certaine compréhension de ce que vous voulez faire. faire avec les résultats.

Ceci étant dit, la bibliothèque standard de Python dispose de plusieurs modules pour l'analyse syntaxique de XML (y compris DOM, SAX et ElementTree). Depuis Python 2.6, la prise en charge de la conversion des structures de données Python vers et depuis JSON est incluse dans le module json module .

L'infrastructure est donc là.

4 votes

Xmljson IMHO est le plus rapide à utiliser et prend en charge plusieurs conventions dès le départ. pypi.org/projet/xmljson

0 votes

Cela a déjà été mentionné dans des réponses plus récentes. Il ne couvre encore qu'un petit sous-ensemble de constructions XML valides, mais probablement la majorité de ce que les gens utilisent dans la pratique.

5voto

pykler Points 131

Vous pouvez consulter les sites suivants http://designtheory.org/library/extrep/designdb-1.0.pdf . Ce projet commence par la conversion de XML en JSON d'une grande bibliothèque de fichiers XML. La conversion a fait l'objet de nombreuses recherches, et le mappage intuitif XML -> JSON le plus simple a été produit (il est décrit au début du document). En résumé, tout est converti en objet JSON, et les blocs répétitifs sont présentés sous la forme d'une liste d'objets.

les objets signifiant des paires clé/valeur (dictionnaire en Python, hashmap en Java, objet en JavaScript)

Il n'y a pas de correspondance vers XML pour obtenir un document identique, car on ne sait pas si une paire clé/valeur est un attribut ou une valeur. <key>value</key> Cette information est donc perdue.

Si vous voulez mon avis, les attributs sont un peu difficiles à utiliser au départ, mais ils fonctionnaient bien pour le HTML.

4voto

dguaraglia Points 3113

Le plus simple est probablement d'analyser le XML en dictionnaires et de sérialiser le tout avec simplejson.

2voto

Luka Marinko Points 1184

Bien que les librairies intégrées pour l'analyse syntaxique XML soient assez bonnes, j'ai un faible pour les librairies suivantes lxml .

Mais pour l'analyse des flux RSS, je recommanderais Analyseur universel de flux qui peut également analyser Atom. Son principal avantage est qu'il peut assimiler même les flux les plus malformés.

Python 2.6 inclut déjà un analyseur JSON, mais une version plus récente de l'analyseur JSON est disponible. version plus rapide est disponible en tant que simplejson .

Avec ces outils, la création d'une application ne devrait pas être si difficile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X