1.json序列化模块
列表,元组,字符串都属于序列,可以通过索引来获取值的就是广义上的序列。python序列化模块讲的序列化主要针对字符串,就是把字典,列表,数字,对象转为字符串的过程,就是序列化。为什么要进行序列化?第一种情况,要把内容写进网络,需要序列化,第二种情况,需要进行网络传输。
2.json.dumps()的使用,把字典,列表,数字序列化为字符串.
代码块
import json
dict={'name':'wangsiyu','age':18}
str_dict=json.dumps(dict)
print(str_dict,type(str_dict)) #{"name": "wangsiyu", "age": 18} <class 'str'>
3.json.loads()反序列化
代码块
import json
dict = {'name': 'wangsiyu', 'age': 18}
str_dict = json.dumps(dict)
res = json.loads(str_dict)
print(res, type(res)) #{'name': 'wangsiyu', 'age': 18} <class 'dict'>
4.json.dump()把字典,列表,数字,对象写入文件
代码块
import json
dic = {'aaa':'bbb','ccc':'ddd'}
with open('json_dump2','w') as f:
json.dump(dic,f)
5.json.load()把文件中的东西读取出来
代码块
import json
with open('json_dump2','r') as f:
res=json.load(f)
print(res) #{'aaa': 'bbb', 'ccc': 'ddd'}
6.json格式的限制:1,json格式的key必须是字符串数据类型,json格式中的字符串只能是""双引号
7.如果是数字为key,那么dump之后会强行转成字符串数据类型,反序列化后数字key也是有引号的。
代码块
import json
dic = {1:2,3:4}
str_dic = json.dumps(dic)
print(str_dic) #{"1": 2, "3": 4}
new_dic = json.loads(str_dic)
print(new_dic) #{'1': 2, '3': 4}
7.json是否支持元组,对元组做value的字典会把元组强制转换成列表
代码块
import json
dic = {'abc':(1,2,3)}
str_dic = json.dumps(dic)
print(str_dic) #{"abc": [1, 2, 3]}
new_dic = json.loads(str_dic)
print(new_dic) #{'abc': [1, 2, 3]}
8.json是否支持元组做key,不支持
代码块
dic = {(1,2,3):'abc'}
str_dic = json.dumps(dic) # 报错
9. 对列表进行dumps()和loads()
代码块
import json
# 对列表的dump
lst = ['aaa',123,'bbb',12.456]
with open('json_demo','w') as f:
json.dump(lst,f)
with open('json_demo','r') as f:
ret = json.load(f)
print(ret) #['aaa', 123, 'bbb', 12.456]
10. 能不能多次dump数据到文件里,可以多次dump但是不能load出来了
代码块
import json
dic = {'abc':(1,2,3)}
lst = ['aaa',123,'bbb',12.456]
with open('json_demo','w') as f:
json.dump(lst,f)
json.dump(dic,f)
with open('json_demo') as f:
ret = json.load(f)
print(ret)
11.多次dump数据到文件里,写文件记得加上换行符‘\n’
代码块
import json
# 想dump多个数据进入文件,用dumps
dic = {'abc':(1,2,3)}
lst = ['aaa',123,'bbb',12.456]
with open('json_demo','w') as f:
str_lst = json.dumps(lst)
str_dic = json.dumps(dic)
f.write(str_lst+'\n')
f.write(str_dic+'\n')
with open('json_demo') as f:
for line in f:
ret = json.loads(line)
print(ret)
12.中文格式的序列化与反序列化 ensure_ascii = False
代码块
import json
dic = {'abc':(1,2,3),'country':'中国'}
ret = json.dumps(dic,ensure_ascii = False)
print(ret) #{"abc": [1, 2, 3], "country": "中国"}
#反序列化
dic_new = json.loads(ret)
print(dic_new) #{'abc': [1, 2, 3], 'country': '中国'}
#
with open('json_demo','w',encoding='utf-8') as f:
json.dump(dic,f,ensure_ascii=False)
13. json的其他参数,是为了用户看的更方便,但是会相对浪费存储空间
代码块
import json
import json
data = {'username':['李华','二愣子'],'sex':'male','age':16}
json_dic2 = json.dumps(data,sort_keys=True,indent=4,separators=(',',':'),ensure_ascii=False)
# sort_keys表示排序,indent表示缩进量,separators表示分隔
print(json_dic2)
![](https://img.haomeiwen.com/i10622766/31d818ce504871de.gif)
网友评论