python json文件遍历所有key、value 及替换key对于的value

时间:2021-11-19 15:22:58

对于接口自动化测试,一般接口以json形式发送返回,往往我们就需要遍历json文件中所有key,value以及修改替换key对于的value。

例如json发送/接收的文件:

SendRegisterVerificationCodejson_txt = """
{
"header":{
"funcNo": "IF010002",
"opStation": "11.11.1.1",
"appId": "aaaaaa",
"deviceId": "kk",
"ver":"wx-1.0",
"channel": "4"
},
"payload": {
"mobileTel": "13817120001"
}
}
"""

我们需要查找所有的报文中的key,value,这个json是字典包含字典的形式,如遍历字典后,依旧含有 key对应的value值是字典,需要继续遍历,此时需要用递归进行处理

import json
#json文件发送形式
SendRegisterVerificationCodejson_txt = """
{
"header":{
"funcNo": "IF010002",
"opStation": "11.11.1.1",
"appId": "aaaaaa",
"deviceId": "kk",
"ver":"wx-1.0",
"channel": "4"
},
"payload": {
"mobileTel": "13817120001"
}
}
"""
date_json
= json.loads(SendRegisterVerificationCodejson_txt)
print(date_json)
print("*"*10)
# 发送时,每次需要注册新的手机号码,就需要json每次提示mobileTel的value进行发送
#
遍历json文件所有的key对应的value
dic ={}
def json_txt(dic_json):
if isinstance(dic_json,dict): #判断是否是字典类型isinstance 返回True false
for key in dic_json:
if isinstance(dic_json[key],dict):#如果dic_json[key]依旧是字典类型
print("****key--:%s value--: %s"%(key,dic_json[key]))
json_txt(dic_json[key])
dic[key]
= dic_json[key]
else:
print("****key--:%s value--: %s"%(key,dic_json[key]))
dic[key]
= dic_json[key]

json_txt(date_json)
print("dic ---: "+str(dic))

其输出结果:

{'payload': {'mobileTel': '13817120001'}, 'header': {'channel': '4', 'deviceId': 'kk', 'opStation': '11.11.1.1', 'ver': 'wx-1.0', 'funcNo': 'IF010002', 'appId': 'aaaaaa'}}
**********
****key--:payload value--: {'mobileTel': '13817120001'}
****key--:mobileTel value--: 13817120001
****key--:header value--: {'channel': '4', 'deviceId': 'kk', 'opStation': '11.11.1.1', 'ver': 'wx-1.0', 'funcNo': 'IF010002', 'appId': 'aaaaaa'}
****key--:channel value--: 4
****key--:deviceId value--: kk
****key--:opStation value--: 11.11.1.1
****key--:ver value--: wx-1.0
****key--:funcNo value--: IF010002
****key--:appId value--: aaaaaa
dic
---: {'channel': '4', 'payload': {'mobileTel': '13817120001'}, 'deviceId': 'kk', 'opStation': '11.11.1.1', 'header': {'channel': '4', 'deviceId': 'kk', 'opStation': '11.11.1.1', 'ver': 'wx-1.0', 'funcNo': 'IF010002', 'appId': 'aaaaaa'}, 'mobileTel': '13817120001', 'ver': 'wx-1.0', 'funcNo': 'IF010002', 'appId': 'aaaaaa'}
******************************

对于接口测试,json主体内容不变,一般我们都是修改json内key对于的value值进行测试,这个接口是手机号注册的接口,正常情况我们都是修改手机号进行测试;

如将key --'mobileTel'对于的value-- '13817120001'修改,假如修改为13333333333;

那我们需要在遍历json字典key值后,比对如果遍历到对于的key则修改其value。

def  check_json_value(dic_json,k,v):
if isinstance(dic_json,dict):
for key in dic_json:
if key == k:
dic_json[key]
= v
elif isinstance(dic_json[key],dict):
check_json_value(dic_json[key],k,v)
print("date_json 变更前 :")
print(date_json)
check_json_value(date_json,
'mobileTel','13333333333')
print("date_json 变更后 :")
print(date_json)

其输出结果:

date_json 变更前   :
{
'header': {'appId': 'aaaaaa', 'funcNo': 'IF010002', 'ver': 'wx-1.0', 'opStation': '11.11.1.1', 'deviceId': 'kk', 'channel': '4'}, 'payload': {'mobileTel': '13817120001'}}
date_json 变更后 :
{
'header': {'appId': 'aaaaaa', 'funcNo': 'IF010002', 'ver': 'wx-1.0', 'opStation': '11.11.1.1', 'deviceId': 'kk', 'channel': '4'}, 'payload': {'mobileTel': '13333333333'}}