pythonjson格式参数遍历所有key、value及替换key对于的value
1.对于接⼝⾃动化测试,⼀般接⼝以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": "138********"
}
}
"""
需要查所有的报⽂中的key,value,这个json是字典包含字典的形式,如遍历字典后,依旧含有 key对应的value值是字典,需要继续遍历,此时需要⽤递归进⾏处理
代码如下:
1import json
2#json⽂件发送形式
3 SendRegisterVerificationCodejson_txt = """
4{
5  "header":{
6    "funcNo": "IF010002",
7    "opStation": "11.11.1.1",
8    "appId": "aaaaaa",
9    "deviceId": "kk",
10    "ver":"wx-1.0",
11    "channel": "4"
12  },
13  "payload": {
14    "mobileTel": "138********"
15  }
16}
17"""
18 date_json = json.loads(SendRegisterVerificationCodejson_txt)
19print(date_json)
20print("*"*10)
21# 发送时,每次需要注册新的⼿机号码,就需要json每次提⽰mobileTel的value进⾏发送
22#遍历json⽂件所有的key对应的value
23 dic ={}
24def json_txt(dic_json):
25if isinstance(dic_json,dict): #判断是否是字典类型isinstance 返回True false
26for key in dic_json:
27if isinstance(dic_json[key],dict):#如果dic_json[key]依旧是字典类型
28print("****key--:%s value--: %s"%(key,dic_json[key]))
29                json_txt(dic_json[key])
30                dic[key] = dic_json[key]
31else:
32print("****key--:%s value--: %s"%(key,dic_json[key]))
33                dic[key] = dic_json[key]
34
35 json_txt(date_json)
36print("dic ---: "+str(dic))
输出结果:
data_json:  {'header': {'funcNo': 'IF010002', 'opStation': '11.11.1.1', 'appId': 'aaaaaa', 'deviceId': 'kk', 'ver': 'wx-1.0', 'channel': '4'}, 'payload': {'mobileTel': '138********'}}
data_json:  {'header': {'funcNo': 'IF010002', 'opStation': '11.11.1.1', 'appId': 'aaaaaa', 'deviceId': 'kk', 'ver': 'wx-1.0', 'channel': '4'}, 'payload': {'mobileTel': '138********'}}
**********
****key--:header ,value--: {'funcNo': 'IF010002', 'opStation': '11.11.1.1', 'appId': 'aaaaaa', 'deviceId': 'kk', 'ver': 'wx-1.0', 'channel': '4'}
****key--:funcNo ,value--: IF010002
****key--:opStation ,value--: 11.11.1.1
****key--:appId ,value--: aaaaaa
linux命令连接mysql****key--:deviceId ,value--: kk
****key--:ver ,value--: wx-1.0
python解析json文件
****key--:channel ,value--: 4
****key--:payload ,value--: {'mobileTel': '138********'}
****key--:mobileTel ,value--: 138********
dic ---: {'funcNo': 'IF010002', 'opStation': '11.11.1.1', 'appId': 'aaaaaa', 'deviceId': 'kk', 'ver': 'wx-1.0', 'channel': '4', 'header': {'funcNo':
'IF010002', 'opStation': '11.11.1.1', 'appId': 'aaaaaa', 'deviceId': 'kk', 'ver': 'wx-1.0', 'channel': '4'}, 'mobileTel': '138********', 'payload': {'mobileTel': '138********'}}
2.对于接⼝测试,json主体内容不变,⼀般我们都是修改json内key对于的value值进⾏测试,这个接⼝是⼿机号注册的接⼝,正常情况我们都是修改⼿机号进⾏测试;
如将key --'mobileTel'对于的value-- '138********'修改,假如修改为133********;
那我们需要在遍历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','133********')
print("date_json 变更后  :")
print(date_json)
完整代码:
1import json
2"""
3实现:
41.json_txt(dic_json):json格式,遍历key,value,存储到字典中
52.heck_json_value(dic_json,k,v)json格式,遍历后,替换key的value值
windows程序设计 pdf63.data_Json(Sendjson_txt),将json字符串转化为json格式
7"""
8
9#json序列化json格式
10def data_Json(Sendjson_txt):
11    data_json = json.loads(Sendjson_txt)
12print('data_json: ',data_json)
13return data_json
14
15#遍历json⽂件所有的key对应的value,存储到⼀个字典中
16 dic ={}
17def json_txt(dic_json):
18if isinstance(dic_json,dict): #判断是否是字典类型isinstance 返回True,false
19for key in dic_json:
20if isinstance(dic_json[key],dict):#如果dic_json[key]依旧是字典类型
21print("****key--:%s ,value--: %s"%(key,dic_json[key]))
22#递归调⽤
23                json_txt(dic_json[key])
24                dic[key] = dic_json[key]
25else:
26print("****key--:%s ,value--: %s"%(key,dic_json[key]))
27                dic[key] = dic_json[key]
28
29
30#遍历json字典key值后,查到ke则修改值value
31def  check_json_value(dic_json,k,v):
32if isinstance(dic_json,dict):
33for key in dic_json:
34if key == k:
35                dic_json[key] = v
36elif isinstance(dic_json[key],dict):
37                check_json_value(dic_json[key],k,v)
38
39if__name__=="__main__":
40#json⽂件发送形式
41    Sendjson_txt = """
42    {
43      "header":{
44        "funcNo": "IF010002",
45        "opStation": "11.11.1.1",
46        "appId": "aaaaaa",
47        "deviceId": "kk",
48        "ver":"wx-1.0",
49        "channel": "4"
50      },
alter和update的区别51      "payload": {
52        "mobileTel": "138********"
53      }
54    }
55"""
56#格式化
57    data_json = data_Json(Sendjson_txt)
58print('data_json: ',data_json)
59print("*"*10)
60#
61    json_txt(data_json)
62print("dic ---: "+str(dic))
63php免费在线教程
jsp的三种注释
64#
65print("data_json 变更前  :")
66print(data_json)
67    check_json_value(data_json,'mobileTel','133********')
68print("data_json 变更后  :")
69print(data_json)
执⾏结果:
data_json:  {'header': {'funcNo': 'IF010002', 'opStation': '11.11.1.1', 'appId': 'aaaaaa', 'deviceId': 'kk', 'ver': 'wx-1.0', 'channel': '4'}, 'payload': {'mobileTel': '138********'}}
data_json:  {'header': {'funcNo': 'IF010002', 'opStation': '11.11.1.1', 'appId': 'aaaaaa', 'deviceId': 'kk', 'ver': 'wx-1.0', 'channel': '4'}, 'payload': {'mobileTel': '138********'}}
**********
****key--:header ,value--: {'funcNo': 'IF010002', 'opStation': '11.11.1.1', 'appId': 'aaaaaa', 'deviceId': 'kk', 'ver': 'wx-1.0', 'channel': '4'}
****key--:funcNo ,value--: IF010002
****key--:opStation ,value--: 11.11.1.1
****key--:appId ,value--: aaaaaa
****key--:deviceId ,value--: kk
****key--:ver ,value--: wx-1.0
****key--:channel ,value--: 4
****key--:payload ,value--: {'mobileTel': '138********'}
****key--:mobileTel ,value--: 138********
dic ---: {'funcNo': 'IF010002', 'opStation': '11.11.1.1', 'appId': 'aaaaaa', 'deviceId': 'kk', 'ver': 'wx-1.0', 'channel': '4', 'header': {'funcNo':
'IF010002', 'opStation': '11.11.1.1', 'appId': 'aaaaaa', 'deviceId': 'kk', 'ver': 'wx-1.0', 'channel': '4'}, 'mobileTel': '138********', 'payload': {'mobileTel': '138********'}}
data_json 变更前  :
{'header': {'funcNo': 'IF010002', 'opStation': '11.11.1.1', 'appId': 'aaaaaa', 'deviceId': 'kk', 'ver': 'wx-1.0', 'channel': '4'}, 'payload': {'mobileTel': '138********'}}
data_json 变更后  :
{'header': {'funcNo': 'IF010002', 'opStation': '11.11.1.1', 'appId': 'aaaaaa', 'deviceId': 'kk', 'ver': 'wx-1.0', 'channel': '4'}, 'payload': {'mobileTel': '133********'}}
---------------------------------------------------------------------------------------------------------------------------------------------------------------
PS:正在写⼀个处理接⼝的逻辑,感谢原⽂作者的分享:wwwblogs/HZQHZA/p/7301362.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。