📌  相关文章
📜  TypeError:日期类型的对象不是 JSON 可序列化的 (1)

📅  最后修改于: 2023-12-03 15:35:23.905000             🧑  作者: Mango

TypeError: 日期类型的对象不是 JSON 可序列化的

在使用JSON进行数据传输时,可能会遇到类似于“TypeError: 日期类型的对象不是 JSON 可序列化的”的错误。这是因为JSON不支持将日期类型转换为字符串,JSON只支持以下数据类型:

  • 字符串
  • 数字
  • 布尔值
  • 对象
  • 数组
  • null

所以,在JSON序列化时,我们需要手动将日期类型转换为字符串类型,例如使用Date对象的toJSON()方法:

import json
import datetime

class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, (datetime.date, datetime.datetime)):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        return json.JSONEncoder.default(self, obj)

data = {
    "name": "John",
    "age": 30,
    "date_of_birth": datetime.date(1991, 1, 1)
}

json.dumps(data, cls=CustomEncoder)

在上述代码中,我们自定义了一个json的编码器,当遇到日期类型时会自动调用我们定义的default方法,将日期类型转换为字符串类型。

此外,我们还可以通过在json.dumps()函数中传入参数,使其自动转换日期类型为字符串类型:

import json
import datetime

data = {
    "name": "John",
    "age": 30,
    "date_of_birth": datetime.date(1991, 1, 1)
}

json.dumps(data, default=str)

在上述代码中,我们将default参数设置为str,即对所有非字符串类型的数据都进行强制类型转换为字符串。