2011-05-31 64 views
1

我想用webpy查詢MySQL數據庫。從SQL查詢中,我得到以下內容。如何使用webpy將MySQL查詢格式化爲JSON?

<Storage {'title': u'Learn web.py', 'done': 0, 'id': 0L, 'mytime': datetime.datetime(2011, 5, 30, 10, 53, 9)}> 

我試圖序列使用json.dumps(data)成JSON格式的數據,但是我得到一個錯誤,指出該數據是不可序列化。

我大概可以遍歷每個鍵值對並將其放入另一個字典,但似乎太多的工作。

有關最佳方法的任何建議?

編輯: 我覺得我的問題是因爲我在數據中有datetime.datetime(2011, 5, 30, 10, 53, 9)。我從數據庫中刪除mytime列,一切正常。有沒有辦法將mytime列添加到JSON字符串中?

回答

1

可以擴展json.JSONEncoder處理日期:

使用這個存儲對象作爲參數我沒有測試,但你說它在查詢中沒有日期時有效,我認爲這應該起作用。 (有關擴展編碼器對象的信息,請參閱json模塊docs)。

import datetime, json 

class ExtendedEncoder(json.JSONEncoder): 

    def default(self, o): 
     if isinstance(o, datetime.datetime):    
      # If it's a date, convert to a string 
      # Replace this with whatever your preferred date format is 
      return o.strftime("%Y-%m-%d %H:%M:%S") 

     # Defer to the superclass method 
     return json.JSONEncoder(self, o) 

然後,如果「結果」是你的存儲對象

json_string = json.dumps(result, cls=ExtendedEncoder) 
0

嘗試將其轉換爲UNIX時間戳:

import time 
result.mytime = time.mktime(result.mytime.utctimetuple()) 
+0

僅供參考,我不知道這是如何工作與時區。抱歉。 – icktoofay 2011-05-31 05:02:48