python使用json序列化datetime型別問題處理
阿新 • • 發佈:2018-12-24
使用python的json模組序列化時間或者其他不支援的型別時會拋異常,例如下面的程式碼:
# -*- coding: cp936 -*-from datetime import datetime
import json
if __name__=='__main__':
now = datetime.now()
json.dumps({'now':now})
執行會出現下面的錯誤資訊:
Traceback(most recent call last):File"C:\Users\xx\Desktop\t.py", line 8,in<module> json.dumps({'now':now})File"C:\Python27\lib\json\__init__.py", line 231,in dumps return _default_encoder.encode(obj)File"C:\Python27\lib\json\encoder.py", line 201,in encode chunks =self.iterencode(o, _one_shot=True)File"C:\Python27\lib\json\encoder.py", line 264,in iterencode return _iterencode(o,0)File"C:\Python27\lib\json\encoder.py", line 178,indefaultraiseTypeError(repr(o)+" is not JSON serializable")TypeError: datetime.datetime(2012,12,26,11,51,33,409000)isnot JSON serializable
意思是說datetime類不支援Json序列化
我們需要對json做下擴充套件,讓它可以支援datetime型別。
classComplexEncoder(json.JSONEncoder):defdefault(self , obj):if isinstance(obj, datetime):return obj.strftime('%Y-%m-%d %H:%M:%S')elif isinstance(obj, date):return obj.strftime('%Y-%m-%d')else:return json.JSONEncoder.default(self, obj)
在呼叫json.dumps時需要指定cls引數為ComplexEncoder
例如:
json.dumps({'now':now}, cls=ComplexEncoder)