json の loads 実行時に、object_hoo= で、日付書式に従った datetime.strptime を実行するように
するしか方法がないみたいだ。
つまり状況によって、日付時刻フォーマットをに沿った変換処理ハンドラを指定するしかない。
# -*- coding: UTF-8 -*- from datetime import datetime, date import json def datetime_hooker(_dict): ndic = dict() for o in _dict: try: ndic[str(o)] = datetime.strptime(_dict[o], '%Y-%m-%d %H:%M:%S.%f') except TypeError: ndic[str(o)] = _dict[o] pass return ndic if __name__ == '__main__': jsonstr = '{ "at": "2020-11-01 21:57:18.564149" }' dict = json.loads(jsonstr, object_hook=datetime_hooker) print(dict)
↑↑↑
これでは、1つの書式しか対応しない書き方で能が無い。
こちらの方が、まだまし。
# -*- coding: UTF-8 -*- from datetime import datetime, date import json import re def date_hooker(dict): for (key, value) in dict.items(): if type(value) is str and re.match('^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{6}$', value): dict[key] = datetime.strptime(value, "%Y-%m-%d %H:%M:%S.%f") elif type(value) is str and re.match('^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$', value): dict[key] = datetime.strptime(value, "%Y-%m-%d %H:%M:%S") else: pass return dict if __name__ == '__main__': jsonstr = '{ "a": "2020-11-01 21:32:09.428031", "b": "2020-11-01 21:32:09" }' dict = json.loads(jsonstr, object_hook=date_hooker) print(dict)