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字符串在写入和读取文件

posted @ 2019-11-18 21:16  Mr沈  阅读(166)  评论(0编辑  收藏  举报