序列化(serializable):将python或其余语言的数据类型转换成字符串python
序列:指的是字符串json
json是第三方的特殊数据格式code
为了让不一样语言之间数据能够共享utf-8
各类语言的数据类型不同,但长相同样,要想使用其余语言的数据类型,必须转换成json数据格式,获取到json数据格式会转换成自身的数据类型ci
python数据类型 ——> json数据格式 ——> 字符串 ——> 文件字符串
其余语言若想使用python保存的数据:it
文件 ——> 字符串 ——> json数据格式 ——> 其余语言的数据类型class
注意: 一、json中全部字符串都是双引号import
二、元组比较特殊,python中的元组,转换成json数据,内部会将元组转成列表coding
三、set(集合)不能转换成json数据
import json
json.dumps():序列化:python数据类型——》json——》字符串
json.loads():反序列化:字符串——》json——》python数据类型
json.dump():序列化:python数据类型——》json——》字符串——》json文件中
json.load():反序列化:json文件——》字符串——》json——》python数据类型
所以:dump和load使用更加方便直接存取文件中,保存json数据时必定要以.json文件后缀
一、dumps与loads
import json l1 = ['张全蛋', '李二蛋'] # 序列化,将本语言的类型转换成json类型进而转换成字符串 # ensure_ascii默认的是True,转换成字符串后是bytes类型 json_str = json.dumps(l1,ensure_ascii=False) print(json_str) print(type(json_str)) # <class 'str'> # 将转换后的数据反序列化成本语言的数据类型 json_list = json.loads(json_str) print(json_list) print(type(json_list)) # <class 'list'>
#元组会被转换成列表 t1 = (1,2,'shen') # 序列化 json_str = json.dumps(t1,ensure_ascii=False) print(json_str) print(type(json_str)) # <class 'str'> # 反序列化 json_tuple = json.loads(json_str) print(json_tuple) # [1, 2, 'shen'] print(type(json_tuple)) # <class 'list'>
二、dump和load
# 用dumps和loads存读文件 dic = {'name': '沈', 'pwd': '123456'} # 序列化转换成字符串写入文件中 json_str = json.dumps(dic,ensure_ascii=False) with open('user.json','w',encoding='utf-8') as f: f.write(json_str) # 反序列化 json_dict = json.loads(json_str) with open('user.json','r',encoding='utf-8') as f: print(f.read())
# 用dump和load存取文件 dic = {'name': '沈', 'pwd': '123456'} with open('user2.json', 'w', encoding='utf-8') as f: # json.dump(dic,f) # 存到文件中是bytes类型 json.dump(dic,f,ensure_ascii=False) # 转换bytes类型 with open('user2.json','r',encoding='utf-8') as f: print(json.load(f))
用dump和load能够直接写入文件和读取文件,不须要先转换成json字符串在写入和读取文件