加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-05-25 15:04:14 所属栏目:Python 来源:互联网
导读:使用python的json模块序列化时间或者其他不支持的类型时会抛异常,例如下面的代码:

使用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:UsersxxDesktopt.py",line 8,in <module>
  json.dumps({'now':now})
 File "C:Python27libjson__init__.py",line 231,in dumps
  return _default_encoder.encode(obj)
 File "C:Python27libjsonencoder.py",line 201,in encode
  chunks = self.iterencode(o,_one_shot=True)
 File "C:Python27libjsonencoder.py",line 264,in iterencode
  return _iterencode(o,0)
 File "C:Python27libjsonencoder.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)

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读