2016-03-08 47 views
7

我有一個Python類,用於檢索表中的所有列並返回一個JSON與這些數據。datetime.datetime不是JSON可串行化

問題是至少有一個列是日期時間,我似乎無法理解如何序列化列,以便我可以生成有效的JSON。

我的等級如下表所示:本

class GetTodos(Resource): 
    def get(self): 
     con = cx_Oracle.connect('brunojs/[email protected]/orcl') 
     cur = con.cursor() 
     cur.execute("select * from organite_repository") 
     r = [dict((cur.description[i][0], value) \ 
       for i, value in enumerate(row)) for row in cur.fetchall()] 
     cur.connection.close() 
     return (r[0] if r else None) if None else r 

任何提示?

回答

19

JSON沒有默認的日期時間類型,所以這就是爲什麼Python無法自動處理它。所以你需要以某種方式將日期時間變成字符串。我認爲最好的方法是編寫一個自定義處理程序來幫助json模塊。

import datetime 
import json 

def datetime_handler(x): 
    if isinstance(x, datetime.datetime): 
     return x.isoformat() 
    raise TypeError("Unknown type") 

json.dumps(data, default=datetime_handler) 
+0

我用'raise x'更新了我的情況。 –

+0

使用'json.JSONEncoder.default = datetime_handler'來自動解析日期時間,而不是每次都使用'default = datetime_handler'。 – ChaimG

+0

我得到了一個類型錯誤與這個答案,說datetime_handler接受1參數,但JSON試圖把它2。 – user1917407

3

一個簡單的方法來做到這一點是將數據轉換爲字符串。 這樣,你將能夠與JSON轉儲。

>>> datetime.now() 
datetime.datetime(2016, 3, 8, 11, 37, 24, 123639) 

>>> str(datetime.now()) 
'2016-03-08 11:37:27.511053' 

但是,你也可以實現一個序列化器來轉換你想要的數據。

相關問題