一、json序列化时默认支持的数据类型
Python | JSON |
dict | object |
list, tuple | array |
str | string |
int, float, int- & float-derived Enums | number |
True | true |
False | false |
None | null |
除此之外的数据类型,就需要我们个性化定制。
二、定制支持datetime类型
需要完成以下步骤:
- 定义一个继承自JSONEncoder的类,重写里面的default方法,定义对datetime类型数据的处理方法
- 在用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啦,在线秒回ヾ(◍°∇°◍)ノ゙