首页 > 解决方案 > 将 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的是 type Employee,就像坚持到 JSON 时一样。

我认为这应该是可以实现的object_hook这个 SO 答案object_hook文档解释了如何将它用于“平面”类型对象(因为缺少更好的词),但不确定如何将它用于自定义类型的字典,就像这里一样。

标签: pythonjsondictionary

解决方案


我想说你想要做的是让你的 init 语句像现在一样接受字典,然后通过循环遍历你的字典或来自 json 的列表来创建类。您还必须创建一个特定的转储函数,将对象中的所有变量转储到字典中以移动到 json。


推荐阅读