Конвертация json в xml в python
Есть json:
{
"Response": {
"TransactionId":"12345",
"ResultCode": "0",
"Fields": {
"field1": {
"name": "LegalCode",
"text": "4"
}
},
"Comment": null
}
}
Нужно с помощью xmxl получить:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Transaction>12345</TransactionId>
<ResultCode>0</ResultCode>
<Fields>
<field1 name="LegalCode">4</field1>
</Fields>
<Comment></Comment>
</Response>
Пример конвертации есть, но он не поддерживает случаев, когда есть аттрибуты как в нашем случае: <field1 name="LegalCode">4</field1>
Ответы (1 шт):
Автор решения: versetty777
→ Ссылка
Попробуйте:
import json
import xmltodict
json_string = '{"Response": {"TransactionId":"12345","ResultCode": "0","Fields": {"field1": {"name": "LegalCode","text": "4"}},"Comment": null}}'
json_data = json.loads(json_string)
xml_string = xmltodict.unparse(json_data, pretty=True)
print(xml_string)
Рекурсивная функция:
import json
def json_to_xml(json_obj, line_padding=""):
json_obj_type = type(json_obj)
if json_obj_type is list:
for sub_elem in json_obj:
json_to_xml(sub_elem, line_padding)
if json_obj_type is dict:
for tag_name in json_obj:
sub_obj = json_obj[tag_name]
if type(sub_obj) is list:
for sub_elem in sub_obj:
json_to_xml(sub_elem, line_padding)
else:
if "name" in json_obj:
print("%s<%s name='%s'>" % (line_padding, tag_name, json_obj["name"]), end="")
else:
print("%s<%s>" % (line_padding, tag_name), end="")
json_to_xml(sub_obj, line_padding + " ")
print("%s</%s>" % (line_padding, tag_name))
if json_obj_type is str:
print(json_obj)
elif json_obj_type is int:
print(json_obj)
elif json_obj_type is bool:
print(json_obj)
elif json_obj_type is None:
print()
json_string = '{"Response": {"TransactionId":"12345","ResultCode": "0","Fields": {"field1": {"name": "LegalCode","text": "4"}},"Comment": null}}'
json_data = json.loads(json_string)
print("<?xml version='1.0' encoding='UTF-8'?>")
json_to_xml(json_data)
При помощи библиотеки xmljson
import json
from xmljson import badgerfish as bf
json_string = '{"Response": {"TransactionId":"12345","ResultCode": "0","Fields": {"field1": {"name": "LegalCode","text": "4"}},"Comment": null}}'
json_data = json.loads(json_string)
xml_string = bf.data(json_data)
print(xml_string)