python預設json庫處理mysql中datetime,date型別不能序列化json的解決方案
阿新 • • 發佈:2019-01-29
今天處理mysql資料庫資料時,從資料庫中讀取了datetime和date型別。不幸運的是預設的json庫是不支援
datetime和date型別的序列化的。
#!/usr/bin/env python # -*- coding: utf-8 -*- """ This module is used to provide a json-extend part for datetime/date serialization. @author Alex @date 2015/03/29 """ import json from datetime import date from datetime import datetime class JsonExtendEncoder(json.JSONEncoder): """ This class provide an extension to json serialization for datetime/date. """ def default(self, o): """ provide a interface for datetime/date """ if isinstance(o, datetime): return o.strftime('%Y-%m-%d %H:%M:%S') elif isinstance(o, date): return o.strftime('%Y-%m-%d') else: return json.JSONEncoder.default(self, o) if __name__ == '__main__': d = {'now': datetime.now(), 'today': date.today(), 'i': 100} ds = json.dumps(d, cls=JsonExtendEncoder) print "ds type:", type(ds), "ds:", ds l = json.loads(ds) print "l type:", type(l), "ds:", l
因為json.dumps()出來的結果是一個字串,所以如果這個結果要巢狀在另一個json結構中,
可以採用json.loads(ds)恢復成json的格式。這個時候使用的python的json預設庫。
注意到使用json預設庫之前,我們已經將datetime和date轉換成了字串了,這是合理的。
好了,到這裡,我們就圓滿的解決了問題。