[英]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.