1 为什么要序列化
因为TCP/IP协议只支持字节数组的传输,不能直接传对象。对象序列化的结果一定是字节数组!当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。
【注】:一般配合md5用于开放接口(open Api)

【eg】:

# # 1、针对一个接口请求参数进行md5的加密,要求如下:请求参数dict1={"name":"xulihua","age":8}进行ascll码的排序
# #    然后针对排序后的请求参数处理成key=value&key1=value1最后进行md5的加密
import json
import hashlib
import urllib.parse
dict1={"name":"xulihua","age":8}
#1、通过json.dumps函数对python对象编码成字符串
print('1、对字典进行序列化:',json.dumps(dict1))

#2、通过sorted(iterable,key,reverse)的参数key,对字典第一个字段排序
data=dict(sorted(dict1.items(),key=lambda item: item[0]))
print('2、对字典进行ascll码的排序:',data)

#3、通过sorted(iterable,key,reverse)的参数key,对字典第一个字段排序
datas=urllib.parse.urlencode(data)
print('3、对结果处理成key=value:',datas)

#4、通过md5函数进行md5加密
m=hashlib.md5()
m.update(datas.encode('utf-8')) #对字符串进行加密
print('4、进行md5加密:',m.hexdigest()) #拿到加密字符串

  

2 序列化和反序列化
序列化(serialization):及有序的列,数据转换成二进制的有序的过程

协议:规定序列化和反序列化的转换方式及就是把数据保存成二进制存储起来,其是定义的规则,其规则称为协议如果规定了协议,则可以进行序列化和反序列化,其协议是由版本的,约定协议后进行处理

反序列化(deserialization):将有序的二进制序列转换成某种对象(字典,列表等)称为反序列化

持久化:序列化保存到文件就是持久化,序列化未必会持久化,序列化往往是传输或存储。可以将数据序列化后持久化,或者网络传输,也可以将从文件或网络接受到的字节序列反序列化。

3 JSON

(1) 概述
JSON(JavaScript object notation,JS 对象标记)是一种轻量级的数据交换格式,它基于ECMAscript(w3c制定的JS规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据

(2)JSON的数据类型
其key必须是字符串,其值可以是下面类型

双引号引起来的字符串,数值,true和false,null(None),对象(字典),数组(列表)这些都是值

此处表示了JSON值支持的数据类型

    1 string:

      字符串,由双引号包围起来的任意字符的组合,可以有转义字符

    2 number :

      数值,有正负数,整数,浮点数

    3 对象:

      无序的键值对集合

      格式:{key1:value1,...keyn:valuen}

      key 必须是字符串,需要使用双引号包围这个字符串,value可以是任意合法的值

      其表示要么是{},要么有key,value,若key:value完成,则后面不能有逗号,一旦有逗号,则表示后面还有数据

    4 数组 :

      同上,一旦有逗号,则表示后面还有数据

       此处的问题是,其json文件的键是非字符串,其值的字符串不是使用双引号括起来的,因此其会出现报错的情况

    5 null 相当于python的None

    6 布尔型 false(False) true(True)

(3)常用方法
dumps json   编码

dump json     编码并存入文件

loads json      解码

load json        解码,从文件读取数据

 

总结相当于二次学习和提炼,强化记忆,希望自己坚持下去