接口基础 :别傻傻分不清 Dict和json数据类型区别以及转化.

在接口测试时候经常遇到问题是:
数据传入的是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}}

对照上边的图,可以看出是有区别的

  1. 首先单引号变成了双引号
  2. tuple 变成了list 的形式
  3. True 变成了 true
  4. 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)

老铁记得点赞 哦.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值