###
序列化是什么?
现在的序列化都是转向一个字符串数据类型,
我们说的序列就是字符串,
为什么要千方百计的转换成为字符串呢?----是为了存储和传递
如果一个字典{"k":"v"}为什么要转成字符串
1,我往文件或者数据库里面写内容的时候是不能写入字典的,可以写入字符串,
2,还有在网络上传输的时候,我需要传递的是byte类型,怎么把字典转换成为一个byte类型呢,
就要先转换为字符串,然后字符串转换为byte类型,
基本就是这两种情况,需要序列化,
这种从数据类型转为字符串,就是序列换,
把字符串转换为数据类型的操作,就是反序列化,
####
json就是python里面的一个内置模块,用来做序列化的,
json模块---dumps序列化操作--把字段转换成字符串
import json dict1 = {"name":"value","age":11} print(type(dict1)) # <class ‘dict‘> print(type(json.dumps(dict1))) # <class ‘str‘>
###
记住这个序列化之后是一个,{‘name‘: ‘andy‘, ‘age‘: 11}
里面是变为单引号了,
####
json模块---loads反序列化操作--把字段转换成字符串
###
import json jsonData = ‘{"name":"andy","age":11}‘ # jsonData = "{‘name‘:‘andy‘,‘age‘:11}" # 这种不行,必须要有两个引号才行, text = json.loads(jsonData) print(type(jsonData),"-----",jsonData) # <class ‘str‘> ----- {"name":"andy","age":11} print(type(text),"-----",text) # <class ‘dict‘> ----- {‘name‘: ‘andy‘, ‘age‘: 11} text_str = json.dumps(text) print(type(text_str),"-----",text_str) # <class ‘str‘> ----- {"name": "andy", "age": 11} text_dict = json.loads(text_str) print(type(text_dict),"-----",text_dict) # <class ‘str‘> ----- {"name": "andy", "age": 11}
###
在 python3 里,一个json是一个字典,形如 {"a":15}
json转换成字符串的话
那么,如果你要将它转换成字符串,也许你用的是str({"a":15}),这样转出来的,可能是是s= "{‘a‘:‘15‘}",也就是说,里面的kv是单引号的。这个字符串,传到其他地方,再用json.loads(s)的时候会出错,json不支持单引号。
所以,假如你想把一个json结构,转成字符串,传递给远处,然后再重新解析成json结构,应该这样:
s = json.dumps({"a":15})
然后,把数据传到远端,然后再解析回来:
d = json.loads(s)
这样就不会出错了。
也支持列表,能一次性传多个结构
s = json.dumps([{"a":15}, {"b":20}])
然后,把数据传到远端,然后再解析回来:
d = json.loads(s)
所以一定要注意这个单引号和双引号的问题,
###
上面讲了dumps和loads,还有dump,和load两个方法,这两个基本没有用过,
dump和dumps的区别:
dump是将对象序列化并保存到文件中
dumps是将对象序列化
load和loads的区别:
load将序列化字符串从文件读取并反序列化
loads将序列化字符串反序列化
####
####