Je vois un certain nombre de questions sur SO poser des questions sur les moyens de convertir XML en JSON, mais je suis intéressé à aller dans l'autre sens. Existe-t-il une bibliothèque python pour la conversion de JSON en XML?
Edit: Rien n'est revenu tout de suite, alors je suis allé de l'avant et j'ai écrit un script qui résout ce problème.
Python vous permet déjà de convertir du JSON en un dict natif (en utilisant json
ou, dans les versions <2.6, simplejson
), j'ai donc écrit une bibliothèque qui convertit les dict natifs en une chaîne XML.
https://github.com/quandyfactory/dict2xml
Il prend en charge les types de données int, float, boolean, string (et unicode), array et dict et l'imbrication arbitraire (yay récursivité).
Je posterai ceci comme réponse une fois que 8 heures se seront écoulées.
Rien n'est revenu tout de suite, alors je suis allé de l'avant et j'ai écrit un script qui résout ce problème.
Python vous permet déjà de convertir du JSON en un dict natif (en utilisant json
ou, dans les versions <2.6, simplejson
), j'ai donc écrit une bibliothèque qui convertit les dict natifs en une chaîne XML.
https://github.com/quandyfactory/dict2xml
Il prend en charge les types de données int, float, boolean, string (et unicode), array et dict et l'imbrication arbitraire (yay récursivité).
Chargez-le dans un dict en utilisant json.loads puis utilisez quelque chose de cette question ...
Si vous ne possédez pas un tel package, vous pouvez essayer:
def json2xml(json_obj, line_padding=""):
result_list = list()
json_obj_type = type(json_obj)
if json_obj_type is list:
for sub_elem in json_obj:
result_list.append(json2xml(sub_elem, line_padding))
return "\n".join(result_list)
if json_obj_type is dict:
for tag_name in json_obj:
sub_obj = json_obj[tag_name]
result_list.append("%s<%s>" % (line_padding, tag_name))
result_list.append(json2xml(sub_obj, "\t" + line_padding))
result_list.append("%s</%s>" % (line_padding, tag_name))
return "\n".join(result_list)
return "%s%s" % (line_padding, json_obj)
Par exemple:
s='{"main" : {"aaa" : "10", "bbb" : [1,2,3]}}'
j = json.loads(s)
print(json2xml(j))
Résultat:
<main>
<aaa>
10
</aaa>
<bbb>
1
2
3
</bbb>
</main>
from json import loads
from dicttoxml import dicttoxml
s='{"main" : {"aaa" : "10", "bbb" : [1,2,3]}}'
xml = dicttoxml(json.loads(s))
Ou si vos données sont stockées dans un pandas data.frame
comme le mien l’est souvent:
df['xml'] = df['json'].apply(lambda s: dicttoxml(json.loads(s))
Utilisez dicttoxml
pour convertir JSON directement en XML
Installation pip install dicttoxml
ou easy_install dicttoxml
In [2]: from json import loads
In [3]: from dicttoxml import dicttoxml
In [4]: json_obj = '{"main" : {"aaa" : "10", "bbb" : [1,2,3]}}'
In [5]: xml = dicttoxml(loads(json_obj))
In [6]: print(xml)
<?xml version="1.0" encoding="UTF-8" ?><root><main type="dict"><aaa type="str">10</aaa><bbb type="list"><item type="int">1</item><item type="int">2</item><item type="int">3</item></bbb></main></root>
In [7]: xml = dicttoxml(loads(json_obj), attr_type=False)
In [8]: print(xml)
<?xml version="1.0" encoding="UTF-8" ?><root><main><aaa>10</aaa><bbb><item>1</item><item>2</item><item>3</item></bbb></main></root>
Pour plus d'informations sur dicttoxml