json序列化时,如何定制支持datetime类型?

一、json序列化时默认支持的数据类型

Python

JSON

dict

object

list, tuple

array

str

string

int, float, int- & float-derived Enums

number

True

true

False

false

None

null

除此之外的数据类型,就需要我们个性化定制。

二、定制支持datetime类型

 需要完成以下步骤:

  1. 定义一个继承自JSONEncoder的类,重写里面的default方法,定义对datetime类型数据的处理方法
  2. 在用dumps函数序列化时,参数cls的值就设为我们上面写的这个子类
import json
from datetime import datetime


time = datetime(1987,2,5)

class DatetimeEncoder(json.JSONEncoder):
    '''这是JSONEncoder的子类'''
    def default(self,obj):     # pylint: disable = method-hidden
        '''这是重写的default方法
        :参数 obj: 需要序列化的对象
        '''
        # 如果是datetime对象,就按照我们自定义的格式转化为列表
        if isinstance(obj,datetime):
            return [obj.year,obj.month,obj.day,obj.hour]
        # 其他的基本类型数据,就按照JSONEncoder自己的方法处理
        return json.JSONEncoder.default(self,obj)

string = json.dumps({'name':'Alex Brightman','birthday':time},cls=DatetimeEncoder)
print(string)

三、# pylint: disable = method-hidden的作用

 如果不写这句注释,代码运行也没有问题,但是在我用的vscode编辑器里启动了pylint检查,会在def default这里画上红色的波浪线,并指明问题:

An attribute defined in json.encoder line 158 hides this method pylint(method-hidden)

pylint认为子类的方法被父类的方法覆盖了,是个错误。但其实我们代码的逻辑并没有什么问题。所以我们可以告诉pylint忽略这个问题。解决这个问题的方法就是在这行代码后面写上注释 # pylint: disable = method-hidden,告诉pylint禁用对method-hidden这个错误的检查。

method-hidden是报错信息的括号里面指明的,它相当于一个错误码。在pylint官方文档的以下页面能找到各种错误码的详细解释,也能找到它们对应的真·错误码,比如method-hidden对应的错误码是E0202,所以pylint:disable = E0202和我上面写的是等价的。http://pylint.pycqa.org/en/latest/technical_reference/features.html#pylint-checkers-options-and-switches

 

如果这篇博文帮到了你,就请给我点个吧(#^.^#)

有疑问也欢迎留言~博主可nice啦,在线秒回ヾ(◍°∇°◍)ノ゙

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值