JSON文字列に日付時刻がある時、Python での datetime へのデシリアライズ

jsonloads 実行時に、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)