1. 程式人生 > >python預設json庫處理mysql中datetime,date型別不能序列化json的解決方案

python預設json庫處理mysql中datetime,date型別不能序列化json的解決方案

今天處理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轉換成了字串了,這是合理的。

好了,到這裡,我們就圓滿的解決了問題。