• json反序列化与pickle的用法


    json反序列化与pickle

    一、定义

    序列化:将内存中的不可持久化和传输对象转换为可方便持久化和传输对象的过程。

    反序列化:将可持久化和传输对象转换为不可持久化和传输对象的过程。

    二、 应用场景

    跨平台数据传输;
    保留上一次运行程序时对对象的修改

    三、模块和函数

    1. json

    dumps()、dump()(序列化)

    loads()、load() (反序列化)

    2. pickle

    dumps()、dump()(序列化)

    loads()、load ()(反序列化)

    
    
    dumps()与dump()的区别是dumps()只是单纯得将对象序列化,而dump()会在序列化之后将结果写入到文件当中;
    与之对应,loads()与load()区别至于loads()是对dumps的序列化结果进行反序列化,而dump()会从文件中读取内容进行反序列化。

    四、案例

    序列化
    
    info={"name":"kezi","age":22}
    f=open("test.text","w")
    f.write(str(info))
    f.close()
    
    
    反序列
    
    info={"name":"kezi","age":22}
    f=open("test.text","r")
    data=eval(f.read())
    f.close()
    print (data['age'])
    
    
    打印结果
    22
    
     
    
    
    json 简单用法
    
    import json
    
    info={"name":"kezi","age":22}
    f=open("test.text","w")
    print(json.dumps(info))
    f.write(json.dumps(info))
    #f.write(str(info))
    f.close()
    
    打印结果
    {"age": 22, "name": "kezi"}
    
     
    
    import json
    
    f=open("test.text","r")
    #data=eval(f.read())
    data=json.loads(f.read())
    f.close()
    print (data['age'])
    打印结果
    22
    
    序列化
    pickle
    
    import pickle
    def si(name):
    print("helle",name)
    info={"name":"kezi","age":22,"func":si}
    f=open("test.text","wb")
    print(pickle.dumps(info))
    f.write(pickle.dumps(info))
    #f.write(str(info))
    f.close()
    
    打印结果
    b'x80x03}qx00(Xx04x00x00x00nameqx01Xx04x00x00x00keziqx02Xx03x00x00x00ageqx03Kx16Xx04x00x00x00funcqx04c__main__
    si
    qx05u.'
    
    反序列化
    
    
    import pickle
    def si(name):
    print("helle2",name)
    f=open("test.text","rb")
    #data=eval(f.read())
    data=pickle.loads(f.read())
    f.close()
    print (data["func"]("kezi"))
    
    
    打印结果
    helle2 kezi
    None
    
    另一种简化写法
    import pickle
    def si(name):
    print("helle",name)
    info={"name":"kezi","age":22,"func":si}
    f=open("test.text","wb")
    pickle.dump(info,f) #f.write(pickle.dumps(info))
    f.close()
    
    import pickle
    def si(name):
    print("helle2",name)
    f=open("test.text","rb")
    #data=eval(f.read())
    data=pickle.load(f)#data=pickle.loads(f.read())
    f.close()
    print (data ["func"]("kezi"))

    pickle序列化结果为bites类型,只适合于Python机器之间的交互。

        json序列化结果为str类型,能够被多种语言识别,可用于与其他程序设计语言交互。
      目前,JSON格式字符串已经成为网络传输中的一种标准格式,所以在web后台开发中通常用json模块来序列化而不是pickle模块。
      JSON和Python内置的数据类型对应如下:
    JSON类型
    Python类型
    {}
    dict
    []
    list
    "string"
    'str'或u'unicode'
    1234.56
    int或float
    true/false
    True/False
    null
    None

    注:

     (1)序列化与反序列化是为了解决内存中对象的持久化与传输问题;

    (2)Python中提供了pickle和json两个模块进行序列化与反序列化;
    (3)dumps()和dump()用于序列化,loads()和load()用于反序列化;
    (4)pickle模块能序列化任何对象,序列化结果为bites类型,只适合于Python机器之间交互;
    json模块只能序列化Python基本类型,序列化结果为json格式字符串,适合不同开发语言之间交互。
    json的用法与pickle大致相同,但要注意在读写文件时json的读写模式是“w”和“b”,而不是“wb”和“rb”。
     
  • 相关阅读:
    ORACLE 表移动后必须做的事
    浅谈oracle的监听服务静态注册
    SAP HANA2.0 EXPRESS 下载安装及管理
    ORA14452: attempt to create, alter or drop
    【JAVA】Macbook eclipse快速抽取函数快捷键(extract method)
    Linux 报错误:The remote server returned an error 500
    网页可能暂时无法连接,或者它已永久性地移动到了新网址。
    kafka 原理和总结
    Timer 原理 到 spring 定时器任务
    centos 安装kafka
  • 原文地址:https://www.cnblogs.com/kezi/p/11909418.html
Copyright © 2020-2023  润新知