[英]Logging dictionaries with datetime objects without Serialization error
我正在嘗試將 python 字典記錄為 JSON,就像這樣logging.info(dict(msg="foo", data=obj))
。 但是在某些情況下, obj
可能包含日期時間對象,在這些情況下我會收到 JSON 序列化錯誤。
是否有一種簡單的方法來記錄對象(例如日期時間對象)自動序列化的字典,例如讓它在這些對象上調用“str”函數?
您可以為datetime
對象定義自己的序列化程序:
def to_json(python_object):
if isinstance(python_object, datetime.datetime):
return {'__class__': 'datetime.datetime',
'__value__': time.asctime(python_object.timetuple())}
if isinstance(python_object, time.struct_time):
return {'__class__': 'time.asctime',
'__value__': time.asctime(python_object)}
if isinstance(python_object, bytes):
return {'__class__': 'bytes',
'__value__': list(python_object)}
raise TypeError(repr(python_object) + ' is not JSON serializable')
def from_json(json_object):
if '__class__' in json_object:
if json_object['__class__'] == 'datetime.datetime':
return datetime.datetime.fromtimestamp(time.mktime(time.strptime(json_object['__value__'])))
if json_object['__class__'] == 'time.asctime':
return time.strptime(json_object['__value__'])
if json_object['__class__'] == 'bytes':
return bytes(json_object['__value__'])
return json_object
然后這樣稱呼它:
json.dump(entry, f, default=to_json)
或者為了回讀
entry = json.load(f, object_hook=from_json)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.