datetimeTypeError: datetime.datetime(2015, 1, 29, 8, 17, 41) is not JSON serializable

本文介绍如何在使用Python的json模块将包含datetime类型的字典转换为JSON字符串时,通过自定义encoder来解决TypeError问题。

解决json.dumps不能序列化datetime类型的问题

- Mar 20th, 2014 - posted inpython | Comments

使用python自带的json.

dumps方法转换数据为json的时候,如果格式化的数据中有datetime类型的数据时会报错

TypeError: datetime.datetime(2014, 03, 20, 12, 10, 44) is not JSON serializable

查了一下,找到如下的方法:

  import json
  from datetime import date, datetime
  class MyEncoder(json.JSONEncoder):
    def default(self, obj):
        # if isinstance(obj, datetime.datetime):
        #     return int(mktime(obj.timetuple()))
        if isinstance(obj, datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(obj, date):
            return obj.strftime('%Y-%m-%d')
        else:
            return json.JSONEncoder.default(self, obj)
     print json.dumps(dataMap, cls=MyEncoder)




  
在处理 `Object of type 'datetime' is not JSON serializable` 错误时,可采用以下几种方法: ### 自定义 JSON 编码器 通过继承 `json.JSONEncoder` 类并重写 `default` 方法,能让 JSON 序列化器知晓如何处理 `datetime` 对象。以下是示例代码: ```python import json from datetime import datetime class DateTimeEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime): return obj.isoformat() return super().default(obj) # 示例数据 data = {'date': datetime.now()} # 使用自定义编码器进行序列化 json_data = json.dumps(data, cls=DateTimeEncoder) print(json_data) ``` 此代码定义了 `DateTimeEncoder` 类,其 `default` 方法会检查对象是否为 `datetime` 类型,若是则将其转换为 ISO 格式字符串。 ### 在序列化时转换 `datetime` 对象 在进行 JSON 序列化之前,手动把 `datetime` 对象转换为字符串。示例如下: ```python import json from datetime import datetime # 示例数据 data = {'date': datetime.now()} # 手动转换 datetime 对象 data['date'] = data['date'].isoformat() # 进行 JSON 序列化 json_data = json.dumps(data) print(json_data) ``` 该代码在序列化前将 `datetime` 对象转换为 ISO 格式字符串。 ### 在 Django 中使用自定义序列化器 若在 Django 项目里遇到此问题,可自定义序列化器来处理 `datetime` 对象。示例如下: ```python from django.core.serializers.json import DjangoJSONEncoder import json from datetime import datetime # 示例数据 data = {'date': datetime.now()} # 使用 DjangoJSONEncoder 进行序列化 json_data = json.dumps(data, cls=DjangoJSONEncoder) print(json_data) ``` `DjangoJSONEncoder` 是 Django 提供的自定义 JSON 编码器,它能处理多种 Django 特有的数据类型,包含 `datetime` 对象。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值