python 元组 字典 列表 序列化与反序列化

悠悠 2021-09-07 06:02 408阅读 0赞

在python中,序列化是指把Python的对象编码转化为JSON格式的字符串;反序列化则是相反,是把JSON格式的字符串解码为Python数据对象。其中专门提供了JSON库来处理这个过程。

  一、JSON库的应用

  把内置数据结构如元组、字典、列表进行序列化处理后,类型为str(字符串),而经过反序列化处理后,数据结构依然是列表和字典(元组经过序列化和反序列化后数据类型为字典,不再是元组)。在JSON库中,序列化和反序列化的处理是分为两部分的,一部分是对具体列表数据的处理,另一部分是对文件内容的处理。

1、转化实例代码如下:

  1. # -*- coding: utf-8 -*-# python3.6
  2. import json
  3. # 列表
  4. list1 = [1,2,3,4,5]
  5. print(list1)
  6. print("对列表进行序列化和反序列化的处理:")
  7. print("列表未进行序列化之前的数据类型为:",type(list1))
  8. # 对列表进行序列化处理
  9. list_str = json.dumps(list1)
  10. print("列表序列化后的内容为:{0},类型为:{1}".format(list_str,type(list_str)))
  11. # 对字符串list_str进行反序列化
  12. str_list = json.loads(list_str)
  13. print("字符串反序列化后的内容为:{0},类型为:{1}".format(str_list,type(str_list)))
  14. # 元组
  15. tuple1 = ('name','huzi','age')
  16. print(tuple1)
  17. print("对元组进行序列化和反序列化的处理:")
  18. print("元组未序列化之前的数据类型为:",type(tuple1))
  19. # 对元组tuple1进行序列化处理
  20. tuple_str = json.dumps(tuple1)
  21. print("元组tuple1序列化后的内容为:{0},类型为:{1}".format(tuple_str,type(tuple_str)))
  22. # 对字符串tuple_str反序列化的处理
  23. str_tuple = json.loads(tuple_str)
  24. print("字符串tuple_str反序列化后的内容为:{0},类型为:{1}".format(str_tuple,type(str_tuple)))
  25. # 字典
  26. dict1 = {'name':'huzi','age':'22'}
  27. print(dict1)
  28. print("对字典进行序列化与反序列化的处理")
  29. print("字典未序列化之前的数据类型为:",type(dict1))
  30. # 对字典dict1进行序列化处理
  31. dict_str = json.dumps(dict1)
  32. print("字典dict1序列化后的内容为:{0},类型为:{1}".format(dict_str,type(dict_str)))
  33. # 对字符串dict_str进行反序列化处理
  34. str_dict = json.loads(dict_str)
  35. print("字符串dict_str序列化后的内容为:{0},类型为:{1}".format(str_dict,type(str_dict)))

打印结果如下:

6c34fe54d808e0e1f237ecd7c92c9d9e.png

2、实例应用代码如下:

  在实际服务端与客户端的数据交互中,客户端发送请求到服务端,服务端响应回复数据给客户端,客户端拿到响应数据后就把这些数据存储在文件中了 ,然后后续再继续对文件的数据进行处理,在处理的过程中需要进行序列化与反序列化处理,而序列化的过程实际上是把数据存储在文件中的过程,反序列化的过程是读取文件里边的内容的过程。记录一个例子,例子内容为把服务端返回的数据存储在文件中,然后再读取文件的内容

  1. """
  2. 请求接口为 http://**9.*7.**.**3:8000/login ,
  3. 把服务端返回的响应数据存储在文件中,然后对文件反序列化处理获取里面的具体的值
  4. """
  5. import requests
  6. import json
  7. def login():
  8. headers = {
  9. 'Content-Type': 'application/json'}
  10. data = {"userName":"11111111112","password":"123456"}
  11. response = requests.post(
  12. url = 'http://**9.*7.**.**3:8000/login',
  13. json = data,
  14. headers = headers
  15. )
  16. versionInfo = response.text
  17. print("返回的参数未序列化之前的数据类型为:{0},内容为 {1}".format(type(versionInfo),versionInfo))
  18. # 把服务端返回的响应数据序列化并存储在文件中
  19. json.dump(response.json(),open('json.md','w'))
  20. login()
  21. # 对文件进行反序列化处理,取值message对应的value具体值
  22. dict1 = json.load(open('json.md','r'))
  23. print("文件数据反序列化后的类型为:{0},内容为:{1}".format(type(dict1),dict1))
  24. print("message对应的value的值为:{0}".format(dict1['message']))

  打印结果为:

4ba62fd59d6dcd3e509d9721d5444939.png

发表评论

表情:
评论列表 (有 0 条评论,408人围观)

还没有评论,来说两句吧...

相关阅读

    相关 序列序列

    因为TCP/IP协议只支持字节数组的传输,不能直接传对象。对象序列化的结果一定是字节数组!当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二

    相关 序列序列

    我们知道,和new创建对象,反射创建对象,序列化创建对象也是我们常用的一种对象创建方式,下面就详细的说一说序列化与反序列化。 一.序列化简述 为什么需要序列化与反序列

    相关 序列序列

    序列化:将对象转化为字节序列 反序列化:将字节序列转化为对象 序列化与反序列化的好处: 1. 进行远程通信传输对象 我们知道数据是以二进制的方式在网络上传输的

    相关 序列序列

    一、序列化的概念 序列化:首先,用日常生活中的例子来理解一下序列化。在我们日常生活中,运输一个整个的汽车总是不方便的,所以我们会把汽车拆开,当汽车变成一个个零件的时候,我们

    相关 序列序列

    概念 -------------------- 把对象的状态信息转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。 对象的序列