標籤:看到了 官方文檔 方案 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類型資料(轉)