我的JSON读取:
{
"employee_1": {"name": "Sarah"},
"employee_2": {"name": "Emma"}
}
被创建为:
class Employee:
def __init__(self, name):
self.name = name
employees = {}
employees["employee_1"] = Employee("Sarah")
employees["employee_2"] = Employee("Emma")
json_str = json.dumps(employees,
default=lambda x: x.__dict__)
我将这个JSON写入一个文件,然后从文件中加载它。但是,加载的对象被反序列化为字典的字典,而不是Employee
s的字典。
loaded_employees = json.loads(json_str)
print(type(employees["employee_1"]))
print(type(loaded_employees["employee_1"]))
输出是:
<class '__main__.Employee'>
<class 'dict'>
我希望加载的employee_1
类型为Employee
,就像它在持久化到JSON时一样。
我认为利用object_hook
应该是可以实现的;这个SO答案或object_hook
文档解释了如何将其用于"平面"。type object(因为没有更好的词),尽管不确定如何将它用于此处的自定义类型字典。
我会说你想要做的是让你的init语句像现在一样接受一个字典,然后通过从json中循环遍历你的字典或列表来创建类。您还必须创建一个特定的转储函数,该函数将对象中的所有变量转储到字典中以移动到json中。
加载JSON后将字典元素转换为Employee
employees = json.loads(json_str)
for k, v in employees.items():
employees[k] = Employee(**v)