首页 > 解决方案 > JSON 使用嵌套的自定义对象序列化字典

问题描述

还有其他问题询问如何序列化自定义类的对象。但答案只针对单独倾倒对象。相反,我想转储一个将自定义类对象作为值的字典。我想使用json.dump方法

example_dict_format = {
    "name_A": [message0, message1, ...],
    "name_B": [message0, ...], ...
}

class Message:
    def __init__(self, time, message):
        self.time = time
        self.message = message

    def toJSON(self):
        return json.dump(self.__dict__)

    def __repr__(self):
        return self.toJson()

自定义类并不复杂,它很简单,可以仅表示为字典。我尝试在类中添加__repr__toJSON方法,但没有奏效。我收到以下错误

raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type Message is not JSON serializable

问题:你如何转储这样的字典?

标签: pythonjsonserialization

解决方案


user2099394 的答案是正确的,但是如果您想将代码保留为您尝试编码的类的一部分,那么您可以通过蛮力来做到这一点:

class Message:
    def __init__(self, time, message):
        self.time = time
        self.message = message

    def toJson(self):
        d = {}
        d["time"] = str(self.time)
        d["message"] = self.message
        return json.dumps(d)

推荐阅读