Преобразование JSON в XML в Python
Я вижу ряд вопросов о SO, спрашивающих о способах преобразования XML в JSON, но я заинтересован в том, чтобы пойти другим путем. Есть ли библиотека python для преобразования JSON в XML?
Изменить: Ничего не получилось сразу, поэтому я пошел вперед и написал script, который решает эту проблему.
Python уже позволяет вам конвертировать из JSON в собственный dict (используя json
или, в версиях simplejson), поэтому я написал библиотеку, которая преобразует родные dicts в XML-строку.
https://github.com/quandyfactory/dict2xml
Он поддерживает типы int, float, boolean, string (и unicode), массивы и типы данных dict и произвольную вложенность (yay рекурсия).
Я отправлю это как ответ через 8 часов.
Ответы
Ответ 1
Ничего не получилось сразу, поэтому я пошел вперед и написал script, который решает эту проблему.
Python уже позволяет вам конвертировать из JSON в собственный dict (используя json
или, в версиях simplejson), поэтому я написал библиотеку, которая преобразует родные dicts в XML-строку.
https://github.com/quandyfactory/dict2xml
Он поддерживает типы int, float, boolean, string (и unicode), массивы и типы данных dict и произвольную вложенность (yay рекурсия).
Ответ 2
Загрузите его в dict, используя json.loads, затем используйте что-нибудь из этого вопроса...
Сериализовать словарь Python для XML
Ответ 3
Если у вас нет такого пакета, вы можете попробовать:
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)
Например:
s='{"main" : {"aaa" : "10", "bbb" : [1,2,3]}}'
j = json.loads(s)
print(json2xml(j))
Результат:
<main>
<aaa>
10
</aaa>
<bbb>
1
2
3
</bbb>
</main>
Ответ 4
from json import loads
from dicttoxml import dicttoxml
s='{"main" : {"aaa" : "10", "bbb" : [1,2,3]}}'
xml = dicttoxml(json.loads(s))
Или, если ваши данные хранятся в data.frame
pandas data.frame
поскольку мой часто:
df['xml'] = df['json'].apply(lambda s: dicttoxml(json.loads(s))
Ответ 5
Используйте dicttoxml
для преобразования JSON непосредственно в XML
Монтаж
pip install dicttoxml
или же
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>
Для получения дополнительной информации о dicttoxml