将JSON解析为对象字典



我的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写入一个文件,然后从文件中加载它。但是,加载的对象被反序列化为字典的字典,而不是Employees的字典。

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)

最新更新