Парсинг файла json в xml формат на Python
У меня есть исходный файл .json:
{
"day": "Среда",
"lesson1": {
"time": "11:40-13:30",
"weeks": "3, 5, 7, 9, 11, 15, 17",
"room": "2308 (бывш. 306) ауд.",
"address": "Адрес",
"subject": "Информатика",
"week": "нечетная неделя",
"teacher": "Препод",
"class-format": "Очно-дистанционный"
},
"lesson2": {
"time": "13:30-15:00",
"weeks": "3, 5, 7, 9, 11, 15, 17",
"room": "2308 (бывш. 306) ауд.",
"address": "Адрес",
"subject": "Информатика",
"week": "нечетная неделя",
"teacher": "Препод",
"class-format": "Очно-дистанционный"
}
}
его нужно привести к такому виду (формат xml):
<timetable>
<day>Среда</day>
<lesson1>
<time>11:40-13:30</time>
<weeks>3, 5, 7, 9, 11, 15, 17</weeks>
<room>2308 (бывш. 306) ауд.</room>
<address>ффф</address>
<subject>Информатика</subject>
<week>нечетная неделя</week>
<teacher>ууу</teacher>
<class-format>Очно-дистанционный</class-format>
</lesson1>
<lesson2>
<time>13:30-15:00</time>
<weeks>3, 5, 7, 9, 11, 15, 17</weeks>
<room>2308 (бывш. 306) ауд.</room>
<address>фыва</address>
<subject>Информатика</subject>
<week>нечетная неделя</week>
<teacher>аааа</teacher>
<class-format>Очно-дистанционный</class-format>
</lesson2>
</timetable>
Для этого я написал следующий парсер:
import json
with open('scedule.json', 'r', encoding="utf-8") as json_f:
with open("scedule_2.xml", 'w', encoding="utf-8") as xml:
f = json.load(json_f)
xml.write("<timetable>\n")
for element in f.values():
if not isinstance(element, dict):
for key in f.keys():
if f[key] == element:
xml.write(" <" + key + ">" + element + "</" + key + ">\n")
else:
for key in f.keys():
if f[key] == element:
xml.write(" <" + key + ">\n")
for k in element.items():
xml.write(" <" + k[0] + ">")
xml.write(k[1] + "</" + k[0] + ">\n")
xml.write(" </" + key + ">\n")
xml.write("</timetable>")
Он неплох, но проблема в том, что он не работает для более сложных случаев с множественной вложенностью, например:
{
"day": "Среда",
"lesson1": {
"time": "11:40-13:30",
"weeks": "3, 5, 7, 9, 11, 15, 17",
"room": "2308 (бывш. 306) ауд.",
"address": "()(U",
"subject": "Информатика",
"week": "нечетная неделя",
"teacher": "))))",
"class-format": "Очно-дистанционный"
},
"lesson2": {
"time": {
"pizza": "pepperoni",
"sushi": "fujiama",
"onemorelevel" {
"omegalul": "omegalul",
"ineedhelp": "help_pls"
}
},
"weeks": "3, 5, 7, 9, 11, 15, 17",
"room": "2308 (бывш. 306) ауд.",
"address": "hhh",
"subject": "Информатика",
"week": "нечетная неделя",
"teacher": "...",
"class-format": "Очно-дистанционный"
}
}
Для решения этой проблемы может подойти рекурсивная функция, но я не знаю, как её написать((( Помогите, пожалуйста!