python json格式参数遍历所有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": "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))
输出结果:
data_json: {'header': {'funcNo': 'IF010002', 'opStation': '11.11.1.1', 'appId': 'aaaaaa', 'deviceId': 'kk', 'ver': 'wx-1.0', 'channel': '4'}, 'payload': {'mobileTel': '13817120001'}}
data_json: {'header': {'funcNo': 'IF010002', 'opStation': '11.11.1.1', 'appId': 'aaaaaa', 'deviceId': 'kk', 'ver': 'wx-1.0', 'channel': '4'}, 'payload': {'mobileTel': '13817120001'}}
**********
****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': '13817120001'}
****key--:mobileTel ,value--: 13817120001
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': '13817120001', 'payload': {'mobileTel': '13817120001'}}
2.对于接口测试,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)
完整代码:
import json
"""
实现:
1.json_txt(dic_json):json格式,遍历key,value,存储到字典中
2.heck_json_value(dic_json,k,v)json格式,遍历后,替换key的value值
3.data_Json(Sendjson_txt),将json字符串转化为json格式
""" #json序列化json格式
def data_Json(Sendjson_txt):
data_json = json.loads(Sendjson_txt)
print('data_json: ',data_json)
return data_json #遍历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字典key值后,查到ke则修改值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) if __name__=="__main__":
#json文件发送形式
Sendjson_txt = """
{
"header":{
"funcNo": "IF010002",
"opStation": "11.11.1.1",
"appId": "aaaaaa",
"deviceId": "kk",
"ver":"wx-1.0",
"channel": "4"
},
"payload": {
"mobileTel": "13817120001"
}
}
"""
#格式化
data_json = data_Json(Sendjson_txt)
print('data_json: ',data_json)
print("*"*10)
#
json_txt(data_json)
print("dic ---: "+str(dic)) #
print("data_json 变更前 :")
print(data_json)
check_json_value(data_json,'mobileTel','')
print("data_json 变更后 :")
print(data_json)
执行结果:
data_json: {'header': {'funcNo': 'IF010002', 'opStation': '11.11.1.1', 'appId': 'aaaaaa', 'deviceId': 'kk', 'ver': 'wx-1.0', 'channel': '4'}, 'payload': {'mobileTel': '13817120001'}}
data_json: {'header': {'funcNo': 'IF010002', 'opStation': '11.11.1.1', 'appId': 'aaaaaa', 'deviceId': 'kk', 'ver': 'wx-1.0', 'channel': '4'}, 'payload': {'mobileTel': '13817120001'}}
**********
****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': '13817120001'}
****key--:mobileTel ,value--: 13817120001
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': '13817120001', 'payload': {'mobileTel': '13817120001'}}
data_json 变更前 :
{'header': {'funcNo': 'IF010002', 'opStation': '11.11.1.1', 'appId': 'aaaaaa', 'deviceId': 'kk', 'ver': 'wx-1.0', 'channel': '4'}, 'payload': {'mobileTel': '13817120001'}}
data_json 变更后 :
{'header': {'funcNo': 'IF010002', 'opStation': '11.11.1.1', 'appId': 'aaaaaa', 'deviceId': 'kk', 'ver': 'wx-1.0', 'channel': '4'}, 'payload': {'mobileTel': '13333333333'}}
---------------------------------------------------------------------------------------------------------------------------------------------------------------
PS:正在写一个处理接口的逻辑,感谢原文作者的分享:https://www.cnblogs.com/HZQHZA/p/7301362.html
python json格式参数遍历所有key、value 及替换key对于的value的更多相关文章
- python json格式和csv文件转换
python json格式和csv文件转换 上代码 import csv import json ''' json格式示例 [{ "firstName":"Bill&qu ...
- Python json格式处理
Python json格式处理 首先放一段代码 import requests import jsonpath import json f=open('ip.txt','r',encoding='ut ...
- Json格式循环遍历,Json数组循环遍历
Json格式数据如何遍历,这里我们可以用for..in实现 例如最简单的json格式 , 'handsome' : 'yes' }; for( var key in json1 ){ console. ...
- java web 服务器端处理json格式参数
前面我们说了传递参数的两种访书,第一是key-value形式,第二是json格式,对于第一种我们在服务器端直接使用 request.getParameter("key");就能获取 ...
- Springmvc 的post请求的json格式参数
背景: 这两天在项目中遇到了一个问题.我的环境是springmvc4.1.9,写了几个可以用ajax请求的接口(ajax.jsonp 调用正常).突然一时兴起就用 HTTP 请求的工具(比如火狐浏览器 ...
- python json格式字符串转换为字典格式
不废话,看代码 #_*_ coding:utf- _*_ import os import json course=open('C:\\Users\\ly199\\Desktop\\list.txt' ...
- Winform Post请求传递Json格式参数的写法
注意的是,Json传递需用到Hashtable(哈希表)来添加参数,本人也试过用JObject添加页不行,感觉应该可以的不知道怎么回事,直接上代码, Hashtable ht = new Hashta ...
- 多种JSON格式及遍历方式
/*数组*/ var arr = [["name", "value"], ["name1", "value1"]]; v ...
- Spring MVC 接收Json格式参数
今天做了一个关于表格排序的功能,可以通过右边的箭头做排序操作,每次操作需要通过Ajax将每条记录的Id数组作为参数去发送请求, 后台Spring MVC接到参数后作更改序号操作. 前端页面发送请求的代 ...
随机推荐
- 使用iconv提示未知错误
使用iconv 转化编码的时候提示错误:<b>Notice</b>: iconv() [<a href='http://www.jinyuanbao.cn'>fun ...
- Note1
1.关于数据库主从备份与读写分离 主服务器数据库的每次操作都会记录在二进制日志文件mysql-bin.xxx中.从服务器的I/O线程使用专用帐号登陆到主服务器中读取该二进制文件,并将文件内容写入到自己 ...
- SAP Smartforms打印输出条形码 及相关问题
最近凭证打印需要附加打印条形码,遂做了一个小例子,结果还出现了很多的小问题,按领导的话说,这就是经验! 首先:SE73 -> 系统条形码 -> 更改 -> 创建 -> 选择 N ...
- golang的数据类型之基本数据类型的默认值和转换
默认值: 整型的默认值:0 浮点型的默认值:0字符串的默认值:"" //空布尔类型的默认值:false package mainimport "fmt" f ...
- vue 实现active点击图片切换
循环条件下: 1.点击函数@click="active(index)" 获取点击的位置 2.讲索引值传给class,点击哪一个则显示哪一个的样式 3.在data添加ins的初始值 ...
- setclock - 用系统时间来设置硬件时间
总览 setclock 描述 setclock 用当前系统时钟存储的时间设置系统的硬件时间. 它先读取 /etc/sysconfig/clock 的时间格式, 时间存储前应该转化成这种格式. Red ...
- centos 搭建本地YUM源并使用apache共享YUM源
搭建本地YUM源 1.挂载镜像 2.搭建本地YUM源 删除多余repo文件保留一个就行 本地YUM源就搭建好了 yum repolist 查看yum源 3.使用apache共享YUM源 YUM服务器配 ...
- 转载:对比Angular/jQueryUI/Extjs:没有一个框架是万能的
Angular不能做什么?对比Angular/jQueryUI/Extjs 框架就好比兵器,你得明白你手里拿的是屠龙刀还是倚天剑,刀法主要是砍,剑法主要是刺.对于那些职业喷子和脑残粉,小僧送你们两个字 ...
- 5分钟搞定android混淆(转)
转自:https://www.jianshu.com/p/f3455ecaa56e 前言 混淆是上线前挺重要的一个环节.android使用的ProGuard,可以起到压缩,混淆,预检,优化的作用.但是 ...
- delphi 删除文件夹里面的所有文件
1.新增一个函数 function TForm1.DelDirAll(aDir: string): Boolean;varvSearch: TSearchRec;vRet: integer;vKey: ...