19.python的序列化

自定制序列化

import json
from datetime import datetime

class JsonCustomEncoder(json.JSONEncoder):                  #自定制序列化类
    def default(self, field):                               #field是(123,datetime.now(),Response())
        if isinstance(field, datetime):                     #对datetime.now()转换成字符串类型就可以序列化
            return field.strftime('%Y-%m-%d %H')
        elif isinstance(field, Response):                   #对Response()转换成字典类型就可以序列化
            return field.__dict__
        else:
            return json.JSONEncoder.default(self, field)   #如果是正常的可以序列化的就用默认的序列化方式

class Response(object):
    def __init__(self):
        self.status =True
        self.data = "abcd"

data = {
    'k1': 123,
    'k2': datetime.now(),                        #datetime正常不能序列化(json.dumps默认只能序列化字典列表字符串布尔值)
    'k3': Response()                             #Response() 正常不能序列化
}
ds = json.dumps(data, cls=JsonCustomEncoder)    #cls等于JsonCustomEncoder类,这个类必须继承json.JSONEncoder后data每次拿到数据都会执行default方法
print(ds)

返回:
{"k1": 123, "k3": {"data": "abcd", "status": true}, "k2": "2019-04-04 09"}

posted on 2019-04-04 15:46  我不是西西  阅读(116)  评论(0编辑  收藏  举报