python使用json序列化datetime类型实例解析

yipeiwu_com6年前Python基础

使用python的json模块序列化时间或者其他不支持的类型时会抛异常,例如下面的代码:

# -*- 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

意思是说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 enumerate函数遍历数据对象组合过程解析

这篇文章主要介绍了Python enumerate函数遍历数据对象组合过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 介绍...

Pandas:DataFrame对象的基础操作方法

DataFrame对象的创建,修改,合并 import pandas as pd import numpy as np 创建DataFrame对象 # 创建DataFrame对...

Python字典的基本用法实例分析【创建、增加、获取、修改、删除】

本文实例讲述了Python字典的基本用法。分享给大家供大家参考,具体如下: 字典是一系列的键值对 。 每个键都与一个值相关联, 我们可以使用键来访问与之相关联的值。 与键相关联的值可以任...

Python中音频处理库pydub的使用教程

前言 pydub是Python中用户处理音频文件的一个库。本文主要介绍了关于Python音频处理库pydub使用的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: 安装: &n...

在Python的Django框架中编写编译函数

当遇到一个模板标签(template tag)时,模板解析器就会把标签包含的内容,以及模板解析器自己作为参数调用一个python函数。 这个函数负责返回一个和当前模板标签内容相对应的节点...