关于格式转换

关于格式

1.json

dict = json.loads(str)
str = json.dumps(dict)

2.pickle

pickle模块是python的标准模块,提供了对于python数据的序列化操作,可以将数据转换为bytes类型,其序列化速度比json模块要高。

  • pickle.dumps() 将python数据序列化为bytes类型

  • pickle.loads() 将bytes类型数据反序列化为python的数据类型

    import pickle

    d = {'1': {'count': 10, 'selected': True}, '2': {'count': 20, 'selected': False}}
    s = pickle.dumps(d)
    s
    b'\x80\x03}q\x00(X\x01\x00\x00\x001q\x01}q\x02(X\x05\x00\x00\x00countq\x03K\nX\x08\x00\x00\x00selectedq\x04\x88uX\x01\x00\x00\x002q\x05}q\x06(h\x03K\x14h\x04\x89uu.'
    pickle.loads(s)

3.base64

python标准库中提供了base64模块,用来进行转换

  • base64.b64encode() 将bytes类型数据进行base64编码,返回编码后的bytes类型

  • base64.b64deocde() 将base64编码的bytes类型进行解码,返回解码后的bytes类型

    接pickle测试

    import base64
    s
    b'\x80\x03}q\x00(X\x01\x00\x00\x001q\x01}q\x02(X\x05\x00\x00\x00countq\x03K\nX\x08\x00\x00\x00selectedq\x04\x88uX\x01\x00\x00\x002q\x05}q\x06(h\x03K\x14h\x04\x89uu.'
    b = base64.b64encode(s)
    b
    b'gAN9cQAoWAEAAAAxcQF9cQIoWAUAAABjb3VudHEDSwpYCAAAAHNlbGVjdGVkcQSIdVgBAAAAMnEFfXEGKGgDSxRoBIl1dS4='
    base64.b64decode(b)
    b'\x80\x03}q\x00(X\x01\x00\x00\x001q\x01}q\x02(X\x05\x00\x00\x00countq\x03K\nX\x08\x00\x00\x00selectedq\x04\x88uX\x01\x00\x00\x002q\x05}q\x06(h\x03K\x14h\x04\x89uu.'

    cart_str = request.COOKIES.get('cart') #从redis取出的时str格式

    解析

    cart_bytes = cart_str.encode() # str -> bytes
    cart_bytes2 = base64.b64decode(cart_str) # b64decode(byes类型)
    cart_dict = pickle.loads(cart_bytes)

4.只要是从redis往外取值,取出来的都是bytes格式. redis保存的键值对都是字符串格式.

5.cookie只能保存字符串格式

posted @ 2019-01-04 15:56  半晌贪欢  阅读(273)  评论(0编辑  收藏  举报