JSON 編碼自定義物件
如果我們嘗試以下方法:
import json
from datetime import datetime
data = {'datetime': datetime(2016, 9, 26, 4, 44, 0)}
print(json.dumps(data))
我們得到一個錯誤說 TypeError: datetime.datetime(2016, 9, 26, 4, 44) is not JSON serializable
。
為了能夠正確地序列化 datetime 物件,我們需要編寫自定義程式碼以便如何轉換它:
class DatetimeJSONEncoder(json.JSONEncoder):
def default(self, obj):
try:
return obj.isoformat()
except AttributeError:
# obj has no isoformat method; let the builtin JSON encoder handle it
return super(DatetimeJSONEncoder, self).default(obj)
然後使用此編碼器類而不是 json.dumps
:
encoder = DatetimeJSONEncoder()
print(encoder.encode(data))
# prints {"datetime": "2016-09-26T04:44:00"}