Python JSON encoder to support datetime?

后端 未结 9 1890
长发绾君心
长发绾君心 2020-12-03 10:24

is there any elegant way to make Python JSON encoder support datetime? some 3rd party module or easy hack?

I am using tornado\'s database wrapper to fetch some rows

9条回答
  •  伪装坚强ぢ
    2020-12-03 10:48

    The docs suggest subclassing JSONEncoder and implementing your own default method. Seems like you're basically there, and it's not a "dirty hack".

    The reason dates aren't handled by the default encoder is there is no standard representation of a date in JSON. Some people are using the format /Date(1198908717056)/, but I prefer ISO format personally.

    import json
    import datetime
    
    
    class DateTimeEncoder(json.JSONEncoder):
    
        def default(self, obj):
            if isinstance(obj, (datetime.datetime, datetime.date, datetime.time)):
                return obj.isoformat()
            elif isinstance(obj, datetime.timedelta):
                return (datetime.datetime.min + obj).time().isoformat()
    
            return super(DateTimeEncoder, self).default(obj)
    
    now = datetime.datetime.now()
    encoder = DateTimeEncoder()
    encoder.encode({"datetime": now, "date": now.date(), "time": now.time()})
    > {"datetime": "2019-07-02T16:17:09.990126", "date": "2019-07-02", "time": "16:17:09.990126"}
    

提交回复
热议问题