使用python的json模塊序列化時間或者其他不支持的類型時會拋異常,例如下面的代碼:
# -*- coding: cp936 -*-from datetime import datetimeimport jsonif __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, in default raise TypeError(repr(o) + " is not JSON serializable")TypeError: datetime.datetime(2012, 12, 26, 11, 51, 33, 409000) is not JSON serializable意思是說datetime類不支持Json序列化
我們需要對json做下擴展,讓它可以支持datetime類型。
class ComplexEncoder(json.JSONEncoder): def default(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)以上就是本文關于python使用json序列化datetime類型實例解析的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
新聞熱點
疑難解答