json文件也是一个文本文件,就可以直接使用read()和write()方法去操作文件,只是使用这两个方法不方便,所以对json文件有自己独特的读取和写入的方法.
常用在 做测试的时候,将测试数据定义为json文件格式,使用代码读取json文件,即读取测试数据,进行传参(参数化)
json的介绍:
json基于文本,独立于语言的轻量级的数据交换格式
Json文件的语法
1.json文件的后缀是.json
2.json中主要数据类型为 对象({} 类似python中字典)和数据[], 类似python中的列表),对象和数组可以互相嵌套
3.一个json文件是一个对象或者数据(即json文件的最外层要么是一个{},要么是一个数组[])
4.json中的对象是由键值对组成的,每个数据之间使用逗号隔开,但是最后一个数据后边不要写逗号
5.json中的字符串必须使用双引号
6.json中的其他数据类型 数字类型 —> int float string字符串 —> str 布尔类型 true,false —> True,False null —> None
我叫小明,我今年18岁,性别男,爱好 听歌,游戏,购物,吃饭,睡觉,打豆豆
我的居住地址为 国家 中国,城市上海
我叫小红,我今年17岁,性别女,爱好 听歌,学习,购物
我的居住地址为 国家 中国,城市北京
1.导包import json
2.读打开文件
3.读文件
json.load(文件对象)
# 1.导入json
import json
# 2.读打开文件 (单个)
with open('info.json',encoding='utf-8') as f:
# 3.读取文件
# buf = f.read()
# print(type(buf),buf)
result = json.load(f)
print(type(result))
# 姓名
print(result.get('name'))
# 年龄
print(result.get("age"))
# 城市
print(result.get("address").get("city"))
info.json
{
"name":"小明",
"age":18,
"sex":"男",
"isMen":true,
"like":["听歌","游戏","购物","吃饭","睡觉","打豆豆"],
"address":{
"country":"中国",
"city":"上海"
}
}
import json
with open("info2.json",encoding="utf-8") as f:
info_list = json.load(f)
for info in info_list:
print(info.get('name'),info.get('age'),info.get('address').get('city'))
info2.json
[
{
"name":"小明",
"age":18,
"sex":"男",
"isMen":true,
"like":["听歌","游戏","购物","吃饭","睡觉","打豆豆"],
"address":{
"country":"中国",
"city":"上海"
}
},
{
"name":"小红",
"age":17,
"sex":"女",
"isMen":false,
"like":["听歌","学习"],
"address":{
"country":"中国",
"city":"北京"
}
}
]
某网站的测试数据如下,需求,提取json文件中用户名,密码和预期结果
组成如下格式[{},{},{}]
import json
def read_data():
new_list =[]
with open('info3.json',encoding='utf-8') as f:
data = json.load(f) #列表
for i in data: # i 字典
new_list.append((i.get("desc"),i.get("username"),i.get("password"),i.get("expect")))
# print(new_list)
return new_list
print(read_data())
info3.json
[
{
"desc":"正确的用户名密码",
"username":"admin",
"password":"123456",
"expect":"登录成功"
},
{
"desc":"错误的用户名",
"username":"root",
"password":"123456",
"expect":"登录失败"
},
{
"desc":"错误的密码",
"username":"admin",
"password":"123123",
"expect":"登录失败"
}
]
文件对象.write(字符串) 不能直接将Python的列表和字典作为参数传递
想要将Python中的数据类型存为json文件,需要使用json提供的方法,不再使用write
步骤:
1.导包import json
2.写(w) 方式打开文件
3.写入 json.dump(Python中数据类型,文件对象)
import json
my_list = [('admin','123456','登录成功'),('root','123456','登录失败'),('admin','123123','登录失败')]
with open('info4.json','w',encoding='utf-8') as f:
# json.dump(my_list,f)
# 直接显示中文,不以ASCII的方式显示
# json.dump(my_list,f,ensure_ascii=False)
# 显示缩进
json.dump(my_list,f,ensure_ascii=False,indent=2)
info4.json
[
[
"admin",
"123456",
"登录成功"
],
[
"root",
"123456",
"登录失败"
],
[
"admin",
"123123",
"登录失败"
]
]