这有点复杂,但我尽力解释。
我有一个名为Event
的类,它有两个属性:
self.timestamp= datetime.now()
self.data = this is a big dictionary
我将此类的所有实例放入列表中,最后使用json.dumps()
将整个列表打印到文件中。 json.dumps(self.timeline, indent=4, default=json_handler)
我正在使用python环境,我可以在其中安装/修改库,我只能访问python json< = 2.7。
这是我处理日期时间的解决方法:
# workaround for python json <= 2.7 datetime serializer
def json_handler(obj):
if hasattr(obj, 'isoformat'):
return obj.isoformat()
elif isinstance(obj, event.Event):
return {obj.__class__.__name__ : obj.data}
else:
raise TypeError("Unserializable object {} of type {}".format(obj, type(obj)))
并且一切似乎都正常,直到我注意到json没有打印任何时间戳。 这是为什么?发生了什么事?
答案 0 :(得分:1)
当序列化程序遇到event.Event
类型时,您只是序列化其data
属性,完全跳过timestamp
。您还需要以某种方式返回时间戳。也许是这样的:
def json_handler(obj):
if hasattr(obj, 'isoformat'):
return obj.isoformat()
elif isinstance(obj, Event):
attrs = dict(data=obj.data, timestamp=obj.timestamp)
return {obj.__class__.__name__: attrs}
else:
raise TypeError("Unserializable object {} of type {}".format(obj, type(obj)))