在接口测试时候经常遇到问题是:
数据传入的是dict需要先转化为json 格式接口才能使用(接口对json数据强支持),抓取到的json 数据同样也要转化为dict,供 python 方法用(python 对dict数据强支持).
json数据与dict字典以及对象之间的转化,是必不可少的操作。
想使用 json 的方法,必须 导入 json 模块 .
在Python中自带json库。通过import json导入。
在json模块有四个方法,
loads():将json数据转化成dict数据
dumps():将dict数据转化成json数据
load():读取json文件数据,转成dict数据
dump():将dict数据转化成json数据后写入json文件
1.Dict 转json(dumps())
先看下图片 :
我尽量在下边的代码都覆盖所有的类型,看看他们转化后的区别, 一般都是傻傻分不清,实在太像了.
import json
dict_data={
'list_data':[1,2,3],
'tuple_data':(1,2,3),
'str_data':'string_data',
'int_data':10,
'blo':True,
'none_data':None,
'dict_data':{'a':1,'b':2}
}
json_data=json.dumps(dict_data)
print(json_data)
#打印结果如下
{"list_data": [1, 2, 3], "tuple_data": [1, 2, 3], "str_data": "string_data", "int_data": 10, "blo": true, "none_data": null, "dict_data": {"a": 1, "b": 2}}
对照上边的图,可以看出是有区别的
- 首先单引号变成了双引号
- tuple 变成了list 的形式
- True 变成了 true
- None 变成了null
这上边的区别大家记住下,是各个类型的区别特征.
2.json 转Dict(loads())
理解了上边的再理解 这个方法就容易的多, 大家看看下就好 .
import json
dict_data={
'list_data':[1,2,3],
'tuple_data':(1,2,3),
'str_data':'string_data',
'int_data':10,
'blo':True,
'none_data':None,
'dict_data':{'a':1,'b':2}
}
json_data=json.dumps(dict_data) #转化为json数据
print(json_data)
dict_data=json.loads(json_data)#转化为dict 数据
print(dict_data)
打印结果:
{"list_data": [1, 2, 3], "tuple_data": [1, 2, 3], "str_data": "string_data", "int_data": 10, "blo": true, "none_data": null, "dict_data": {"a": 1, "b": 2}}
#转化为json数据
{'list_data': [1, 2, 3], 'tuple_data': [1, 2, 3], 'str_data': 'string_data', 'int_data': 10, 'blo': True, 'none_data': None, 'dict_data': {'a': 1, 'b': 2}}
#转化为dict 数据
之所以我没有贴出来 json 数据之后再转化是由于以下原因:
python 对json 格式不支持.贴出来会报错, 自己可以尝试下
json的load()与dump()方法的使用
load():读取json文件数据,转成dict数据
dump():将dict数据转化成json数据后写入json文件
大家认真的读 上边的两句话, 有个共同点 都是json文件数据.
显而易见是对文件的操作, 这个大有用处呀,比如我们在做接口的时候,可以把cookie or token
保存在文件里,便于读取. 当然也可以把 关联参数保存在里面.
我们修改下代码 演示这个功能 :
import json
dict_data={
'list_data':[1,2,3],
'tuple_data':(1,2,3),
'str_data':'string_data',
'int_data':10,
'blo':True,
'none_data':None,
'dict_data':{'a':1,'b':2}
}
with open('save_json.json','w') as f: #第一个参数是文件的路径,如果没有会自动保存
json.dump(dict_data,f) #会在目录下生成一个1.json的文件,文件内容是dict数据转成的json数据
with open('save_json.json','r') as f:
read_data=json.load(f) #注意这个只有一个参数就是文件对象 ,和上边有区别 大家注意下
print(read_data)
打印结果;
{'list_data': [1, 2, 3], 'tuple_data': [1, 2, 3], 'str_data': 'string_data', 'int_data': 10, 'blo': True, 'none_data': None, 'dict_data': {'a': 1, 'b': 2}}
在接口里很少用到这个样的形式,一般都要封装在方法内,优化下代码:
import json
dict_data={
'list_data':[1,2,3],
'tuple_data':(1,2,3),
'str_data':'string_data',
'int_data':10,
'blo':True,
'none_data':None,
'dict_data':{'a':1,'b':2}
}
def dict_to_json_write_file():
with open('save_json.json','w') as f: #第一个参数是文件的路径,如果没有会自动保存
json.dump(dict_data,f) #会在目录下生成一个1.json的文件,文件内容是dict数据转成的json数据
def json_file_to_dict():
with open('save_json.json','r') as f:
read_data=json.load(f) #注意这个只有一个参数就是文件对象 ,和上边有区别 大家注意下
print(read_data)
老铁记得点赞 哦.