繁体   English   中英

JSON 使用嵌套的自定义对象序列化 dict

[英]JSON Serialize a dict with a nested custom object

还有其他问题询问如何序列化自定义类的对象。 但是答案是特定于仅倾倒对象的。 我想转储一个将自定义类对象作为值的字典。 我想使用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

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

class ComplexEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Message):
            obj_dict = {key: str(obj.__dict__[key]) for key in obj.__dict__}
            return obj_dict
        # Let the base class default method raise the TypeError
        return json.JSONEncoder.default(self, obj)

json.dump(result, fp, cls=ComplexEncoder, indent=4)

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM