Python序列化

本文详细介绍了Python中json和pickle模块的序列化与反序列化操作,包括json.dumps()、json.loads()、pickle.dumps()和pickle.loads()的使用,并通过实例展示了它们之间的区别,如json不支持set类型,而pickle可以处理。同时,文章还指出了两者在处理布尔值和字典等数据类型时的不同之处。
摘要由CSDN通过智能技术生成

json序列化和反序列化
# coding:utf-8:

import json

def show(data):
    js = json.dumps(data)
    js_type = type(js)
    original = json.loads(js)
    original_type = type(original)
    print('json:%s,json_type:%s,original:%s,original_type:%s' % (js, js_type, original, original_type))

if __name__ == '__main__':
    """
    json.dumps(obj) 将对象obj序列化成字符串
    json.loads(str) 将序列化的字符串还原成原始对象
    obj:number|list|tuple|dict|bool,不能是set
    json.dumps(list) 和 json.dumps(tuple) 结果一样,还原只能还原成list
    json.dumps(bool) 会将第一个字母小写,还原第一个字母会再变成大写
    """
    # list
    show([1, 2, 3])  # json:[1, 2, 3],json_type:<class 'str'>,original:[1, 2, 3],original_type:<class 'list'>

    # tuple 元组json.dumps() 转成 'list',还原也只能还原成list
    show((1, 2, 3))  # json:[1, 2, 3],json_type:<class 'str'>,original:[1, 2, 3],original_type:<class 'list'>

    # True 转换成 'true' 还原成 True
    show(True)  # json:true,json_type:<class 'str'>,original:True,original_type:<class 'bool'>

    # False 转换成 'false' 还原成 False
    show(False)  # json:false,json_type:<class 'str'>,original:False,original_type:<class 'bool'>

    # dict  转换成标准json 还原成dict
    show({'name': 'xie', 'sex': 'man'})  # json:{"name": "xie", "sex": "man"},json_type:<class 'str'>,original:{'name': 'xie', 'sex': 'man'},original_type:<class 'dict'>

    # str 都是一个样子
    show('abc')  # json:"abc",json_type:<class 'str'>,original:abc,original_type:<class 'str'>

    # number 转成成 'number' 还原成number
    show(123)  # json:123,json_type:<class 'str'>,original:123,original_type:<class 'int'>
    show(99.99)  # json:99.99,json_type:<class 'str'>,original:99.99,original_type:<class 'float'>

    # set 不能序列化
pickle序列化与反序列化
# coding:utf-8

import pickle

def show(data):
    pick = pickle.dumps(data)
    pick_type = type(pick)
    original = pickle.loads(pick)
    original_type = type(original)
    print('pickle:%s,pickle_type:%s,original:%s,original_type:%s' % (pick, pick_type, original, original_type))

if __name__ == '__main__':
    """
    pickle.dumps(obj) 将对象序列化成bytes,用法同json.dumps(obj),但其obj可以是set类型
    pickle.loads(bytes) 将bytes还原成原始对象,用法同json.loads(str)
    """
    show([1, 2, 3])  # pickle:b'\x80\x03]q\x00(K\x01K\x02K\x03e.',pickle_type:<class 'bytes'>,original:[1, 2, 3],original_type:<class 'list'>

    # pickle.dumps(obj) obj 可以是 set
    # json.dumps(obj) obj 不可以是 set
    show({1, 2, 3})  # pickle:b'\x80\x03cbuiltins\nset\nq\x00]q\x01(K\x01K\x02K\x03e\x85q\x02Rq\x03.',pickle_type:<class 'bytes'>,original:{1, 2, 3},original_type:<class 'set'>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值