Преобразование словаря со сложным типом в xml - PullRequest
0 голосов
/ 11 июля 2020

У меня есть словарь под названием job_highlight_dict, который содержит {job_id, JobHighlight}

job_id - это число, а JobHighlight - это тип, как определено ниже:

class JobHighlight:
    def __init__(self, display_salary, location, category):
        self.display_salary = display_salary
        self.location = location
        self.category = category

Я хочу преобразовать * От 1009 * до xml и записать его на диск, вот что я пробовал:

xml = dicttoxml.dicttoxml(self.job_highlight_dict)
file = open("export/path_%(time)s.xml", "wb")
file.write(xml)
file.close()

, но я получаю следующую ошибку:

TypeError: неподдерживаемый тип данных : (Выделение вакансии)

1 Ответ

1 голос
/ 11 июля 2020

Вы конвертируете job_highlight_dict["JobHighlight"] из типа JobHighlight в словарь.

Код

job_highlight_dict["JobHighlight"] = {
    "display_salary": job_highlight_dict["JobHighlight"].display_salary,
    "location": job_highlight_dict["JobHighlight"].location,
    "category": job_highlight_dict["JobHighlight"].category
}
xml = dicttoxml.dicttoxml(job_highlight_dict)
file = open("paths.xml", "wb")
file.write(xml)
file.close()

Или проще:

job_highlight_dict["JobHighlight"] = vars(job_highlight_dict["JobHighlight"])
xml = dicttoxml.dicttoxml(job_highlight_dict)
file = open("paths.xml", "wb")
file.write(xml)
file.close()

См .: Python словарь из полей объекта

Пример вывода

Я отформатировал это, но в файле xml появится все в одной строке. Если вы хотите его отформатировать, вам придется использовать красивую печать или что-то в этом роде. См .: https://pypi.org/project/dicttoxml/

<?xml version="1.0" encoding="UTF-8" ?>
<root>
    <job_id type="int">2</job_id>
    <JobHighlight type="dict">
        <display_salary type="str">$80k</display_salary>
        <location type="str">Los Angeles</location>
        <category type="str">Other</category>
    </JobHighlight>
</root>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...