How to overcome “datetime.datetime not JSON serializable”?

后端 未结 30 3264
梦谈多话
梦谈多话 2020-11-22 03:31

I have a basic dict as follows:

sample = {}
sample[\'title\'] = \"String\"
sample[\'somedate\'] = somedatetimehere
         


        
30条回答
  •  暗喜
    暗喜 (楼主)
    2020-11-22 03:44

    Try this one with an example to parse it:

    #!/usr/bin/env python
    
    import datetime
    import json
    
    import dateutil.parser  # pip install python-dateutil
    
    
    class JSONEncoder(json.JSONEncoder):
    
        def default(self, obj):
            if isinstance(obj, datetime.datetime):
                return obj.isoformat()
            return super(JSONEncoder, self).default(obj)
    
    
    def test():
        dts = [
            datetime.datetime.now(),
            datetime.datetime.now(datetime.timezone(-datetime.timedelta(hours=4))),
            datetime.datetime.utcnow(),
            datetime.datetime.now(datetime.timezone.utc),
        ]
        for dt in dts:
            dt_isoformat = json.loads(json.dumps(dt, cls=JSONEncoder))
            dt_parsed = dateutil.parser.parse(dt_isoformat)
            assert dt == dt_parsed
            print(f'{dt}, {dt_isoformat}, {dt_parsed}')
            # 2018-07-22 02:22:42.910637, 2018-07-22T02:22:42.910637, 2018-07-22 02:22:42.910637
            # 2018-07-22 02:22:42.910643-04:00, 2018-07-22T02:22:42.910643-04:00, 2018-07-22 02:22:42.910643-04:00
            # 2018-07-22 06:22:42.910645, 2018-07-22T06:22:42.910645, 2018-07-22 06:22:42.910645
            # 2018-07-22 06:22:42.910646+00:00, 2018-07-22T06:22:42.910646+00:00, 2018-07-22 06:22:42.910646+00:00
    
    
    if __name__ == '__main__':
        test()
    

提交回复
热议问题