Python の json dumps() と dump() は、対象の辞書、Dictionary に、datetime を含んでると
TypeError: Object of type 'datetime' is not JSON serializable
でシリアライズできません。
dumps の default= 属性で変換用のハンドラを指定して置換えないとならないです。
以下のように書くので、実装の都度、出力書式を決めてハンドラを用意するしかないです。
# -*- coding: UTF-8 -*- import json from datetime import datetime, date def custom_serializer(o): return o.strftime('%Y-%m-%d %H:%M:%S.%f') if isinstance(o, (datetime, date)) else o if __name__ == '__main__': dict = dict() dict['now'] = datetime.now() dict['today'] = date.today() jsonstr = json.dumps(dict, default=custom_serializer, indent=2) print(jsonstr)
結果、、、
{ "now": "2020-10-31 14:49:03.649503", "today": "2020-10-31 00:00:00.000000" }
↑は、strftime を使いましたが、ISO8601書式の isoformat() を使えば、
datetime オブジェクトと date オブジェクト、それぞれ型に従って出してくれます。
def custom_serializer(o): return o.isoformat() if isinstance(o, (datetime, date)) else o
とした場合、、
{ "now": "2020-10-31T14:53:49.881443", "today": "2020-10-31" }