zoukankan      html  css  js  c++  java
  • 序列化

    序列化


    什么是序列化

    得到一个序列的结果(字符串)

    字典/列表/数字/对象 ---序列化 ->字符串


    为什么要序列化

    1. 要把内容写入文件需要使用序列化
    2. 网络传输数据时候需要用到序列化

    什么是反序列化

    字符串 -> 反序列化 -> 字典/列表/数字/对象


    序列化方法


    json

    import json
    

    序列化


    序列化字典

    dic = {"aaa": 'bbb', 'ccc':'ddd'}
    print(dic, type(dic))
    

    输出结果

    {'aaa': 'bbb', 'ccc': 'ddd'} <class 'dict'>
    

    说明: 可以观察到, 虽然字典的key aaa是用双引号, 但是输出的时候显示的是单引号;

    python的数据字符串输出都是用单引号, 只有json格式的数据才是双引号


    str_dic = json.dumps(dic)
    print(str_dic, type(str_dic))
    

    输出结果

    {"aaa": "bbb", "ccc": "ddd"} <class 'str'>
    

    说明: 可以观察到, 这是个字符串, 而且里面的字符串都是用双引号引起来的, 表示已经由json序列化成功


    写数据到文件

    方法1

    with open('json_dump', 'w') as f:
        f.write(str_dic)
    


    方法2

    with open('json_dump2', 'w') as f:
        json.dump(dic, f)
    


    反序列化


    反序列化由字典序列化成的json字符串

    ret = json.loads(str_dic)
    print(ret, type(ret))
    

    输出结果

    {'aaa': 'bbb', 'ccc': 'ddd'} <class 'dict'>
    

    读取文件

    with open('json_dump2') as f:
        res = json.load(f)
        print(res, type(res))
    

    输出结果

    {'aaa': 'bbb', 'ccc': 'ddd'} <class 'dict'>
    

    json高级


    限制1

    json格式的key必须是字符串数据类型, 如果是数字为key, 那么dumps之后会强行转换成字符串数据类型


    dic = {1: 2, 3: 4}
    print(dic, type(dic))
    

    输出结果

    {1: 2, 3: 4} <class 'dict'>
    

    序列化

    str_dic = json.dumps(dic)
    print(str_dic, type(str_dic))
    

    输出结果

    {"1": 2, "3": 4} <class 'str'>
    

    反序列化

    new_dic = json.loads(str_dic)
    print(new_dic, type(new_dic))
    

    输出结果

    {'1': 2, '3': 4} <class 'dict'>
    

    限制2

    json对元组做value的字典会把元组强制转换成列表


    dic = {'abc': (1, 2, 3)}
    print(dic, type(dic))
    

    输出结果

    {'abc': (1, 2, 3)} <class 'dict'>
    

    序列化

    str_dic = json.dumps(dic)
    print(str_dic, type(str_dic))
    

    输出结果

    {"abc": [1, 2, 3]} <class 'str'>
    

    反序列化

    new_dic = json.loads(str_dic)
    print(new_dic, type(new_dic))
    print(new_dic['abc'], type(new_dic['abc']))
    

    输出结果

    {'abc': [1, 2, 3]} <class 'dict'>
    [1, 2, 3] <class 'list'>
    

    限制3

    json不支持元组做key

    dic = {(1, 2, 3): 'abc'}
    str_dic = json.dumps(dic)
    

    输出结果

    TypeError: keys must be a string
    

    限制4

    json中的字符串只能是双引号



    pickle


    shelve

  • 相关阅读:
    第1周学习进度
    四则运算题1
    性能监控系统 | 从0到1 搭建Web性能监控系统
    数据库 | Oracle数据库查表空间使用情况
    性能测试 | 系统运行缓慢,CPU 100%,Full GC次数过多问题排查
    Markdown | 语法
    性能测试 | 理解单线程的Redis为何那么快?
    性能测试 | 理解分布式、高并发、多线程
    性能测试 | 常见的性能测试指标
    mysql 中varchar(50)最多能存多少个汉字
  • 原文地址:https://www.cnblogs.com/cjwnb/p/11863696.html
Copyright © 2011-2022 走看看