json模块
json模块
序列化(serializable):将python或其他语言的数据类型转换成字符串
序列:指的是字符串
json是第三方的特殊数据格式
为什么要使用json
为了让不同语言之间数据可以共享
各种语言的数据类型不一样,但长相一样,要想使用其他语言的数据类型,必须转换成json数据格式,获取到json数据格式会转换成自身的数据类型
python数据类型 ——> json数据格式 ——> 字符串 ——> 文件
其他语言若想使用python保存的数据:
文件 ——> 字符串 ——> json数据格式 ——> 其他语言的数据类型
注意: 1、json中所有字符串都是双引号
2、元组比较特殊,python中的元组,转换成json数据,内部会将元组转成列表
3、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文件后缀
1、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'>
2、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字符串在写入和读取文件