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

  • 相关阅读:
    现在, Delphi 的多线程已经非常易用了!
    发现 TSplitter 在嵌套时不好用, 索性写了个替代品
    关于显示透空歌词的思路 回复 "zhaoboaidelphi" 的问题
    简单获取钢琴 88 个键的音高频率值
    准备理一下菜单和工具栏相关的组件
    在 StringGrid 上画线时, 使用 GDI+ 以消除锯齿 回复 "gsjn_8888_6666" 的问题
    解压 svgz 到 svg
    jQuery能做到,PHP能做到,C#也能做到
    监测ASP.NET应用程序性能最简单的方法
    支持高并发的IIS Web服务器常用设置
  • 原文地址:https://www.cnblogs.com/cjwnb/p/11863696.html
Copyright © 2011-2022 走看看