解決python中轉化成json的方法不能序列化datetime類型資料

來源:互聯網
上載者:User

標籤:看到了   官方文檔   方案   other   下載   xen   sel   color   rom   

Python內建的json.dumps方法序列化資料時候如果格式化的資料中有datetime類型資料時候會提示錯誤TypeError: datetime.datetime(2012, 12, 12, 15, 47, 15) is not JSON serializable

 

搜尋出來的解決方案基本都是用Django的DjangoJSONEncoder來解決,為了一個簡單的辦法引入Django這個大傢伙實在有點不知所謂。不過這一點就體現了Django的資料多的優勢了

正在下決心是否乾脆下載了Django的代碼去翻出DjangoJSONEncoder這個方法來的時候看到了官方文檔中關於json.dumps方法的一個參數(cls)說明:

To use a custom JSONEncoder subclass (e.g. one that overrides the default() method to serialize additional types), specify it with the cls kwarg; otherwise JSONEncoder is used.

然後就看到了官方文檔中的一個Demo:

import jsonclass ComplexEncoder(json.JSONEncoder):    def default(self, obj):        if isinstance(obj, complex):            return [obj.real, obj.imag]        return json.JSONEncoder.default(self, obj)>>> dumps(2 + 1j, cls=ComplexEncoder)‘[2.0, 1.0]‘>>> ComplexEncoder().encode(2 + 1j)‘[2.0, 1.0]‘>>> list(ComplexEncoder().iterencode(2 + 1j))[‘[‘, ‘2.0‘, ‘, ‘, ‘1.0‘, ‘]‘]            

 

 

然後簡單擴充了一個JSONEncoder出來用來格式化時間

 1 import json 2 from datetime import date, datetime 3  4 class CJsonEncoder(json.JSONEncoder): 5   def default(self, obj): 6     if isinstance(obj, datetime): 7       return obj.strftime(‘%Y-%m-%d %H:%M:%S‘) 8     elif isinstance(obj, date): 9       return obj.strftime(‘%Y-%m-%d‘)10     else:11       return json.JSONEncoder.default(self, obj)

 

使用時候只要在json.dumps增加一個cls參數即可:

json.dumps(datalist, cls=CJsonEncoder)

 

 

解決python中轉化成json的方法不能序列化datetime類型資料(轉)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.