Парсинг файла 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": "Очно-дистанционный"
    }
}

Для решения этой проблемы может подойти рекурсивная функция, но я не знаю, как её написать((( Помогите, пожалуйста!


Ответы (0 шт):