Python中JSON序列化datetime类型的解决方案

Felix
Felix
发布时间:2026-10-13| 3人浏览过
原创

本文解析Python在使用json模块序列化datetime对象时引发的TypeError异常。通过继承json.JSONEncoder并重写default方法,构建ComplexEncoder类,实现将datetime和date类型转换为指定字符串格式。调用json.dumps时传入cls参数即可解决序列化不支持类型的问题,确保时间数据能正确序列化为JSON字符串。

在Python中,若直接使用json模块尝试序列化datetime对象或其他非标准类型,程序通常会抛出异常。以下代码展示了这一常见错误场景:

# -*- coding: cp936 -*-
from datetime import datetime

import json

if __name__=='__main__':
 now = datetime.now()
 json.dumps({'now':now})

执行上述代码后,系统将返回如下错误堆栈信息:

Traceback (most recent call last):
 File "C:\Users\xx\Desktop\t.py", line 8, in <module>
  json.dumps({'now':now})
 File "C:\Python27\lib\json\__init__.py", line 231, in dumps
  return _default_encoder.encode(obj)
 File "C:\Python27\lib\json\encoder.py", line 201, in encode
  chunks = self.iterencode(o, _one_shot=True)
 File "C:\Python27\lib\json\encoder.py", line 264, in iterencode
  return _iterencode(o, 0)
 File "C:\Python27\lib\json\encoder.py", line 178, in default
  raise TypeError(repr(o) + " is not JSON serializable")
TypeError: datetime.datetime(2012, 12, 26, 11, 51, 33, 409000) is not JSON serializable

该错误表明,默认的JSON编码器无法处理datetime类对象,即datetime类型不支持默认的JSON序列化操作。

为解决此问题,我们需要对json模块进行扩展,使其具备处理datetime类型数据的能力。

class ComplexEncoder(json.JSONEncoder):
  def default(self, obj):
    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)

具体做法是在调用json.dumps函数时,通过cls参数指定自定义的编码器类ComplexEncoder。

具体实现方式如下所示:

json.dumps({'now':now}, cls=ComplexEncoder)

总结

以上内容详细讲解了Python中利用json模块序列化datetime类型的方法与实例。希望本文能对大家有所帮助。欢迎感兴趣的朋友继续浏览本站其他技术专题,如有任何疑问或建议,欢迎留言交流。感谢各位对本站的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。