概述
1、为什么要序列化
因为TCP/IP协议只支持字节数组的传输,不能直接传对象。对象序列化的结果一定是字节数组!当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列在恢复为对象。
2、序列化和反序列化
序列化:及有序的列,数据转换成二进制的有序的过程
协议:规定序列化和反序列化的转换方式就是把数据保存成二进制存储起来,其是定义的规则,其规则称为协议,如果规定了协议,则可以尽心序列化和反序列化
反序列化:将有序的二进制序列转换成某种对象(字典、列表等)称为反序列化
持久化:序列化保存到文件就是持久化,序列化未必会持久化,序列化往往是传输或存储。可以将数据序列化后持久化,或者网络传输,也可以将从文件或网络接受到的字节序列反序列化。
JSON
1、概述
JSON是一种轻量级的数据交换格式,它基于ECMAscript(w3c制定的JS规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据
2、JSON的数据类型
其key必须是字符串,其值可以是
双引号引起来的字符串,数值,true和false,null(None),对象(字典),数组(列表)这些都是值
1 string:
字符串,由双引号包围起来的任意字符的组合,可以有转义字符
2 number :
数值,有正负数,整数,浮点数
3 对象:
无序的键值对集合
格式:{key1:value1,…keyn:valuen}
key 必须是字符串,需要使用双引号包围这个字符串,value可以是任意合法的值
其表示要么是{},要么有key,value,若key:value完成,则后面不能有逗号,一旦有逗号,则表示后面还有数据
4 数组 :
3、JSON常用方法
方法 | 功能 |
---|---|
dumps | json编码 |
dump | json编码并存入文件 |
loads | json解码 |
load | json解码,从文件读取数据 |
4、应用
import json
d = {'name':'tom','age':20,'interest':['music','movie']}
j = json.dumps(d)
print(j)
d1 = json.loads(j)
print(d1)
#输出结果
{"name": "tom", "age": 20, "interest": ["music", "movie"]}
{'name': 'tom', 'age': 20, 'interest': ['music', 'movie']}