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值是字典,需要继续遍历,此时需要用递归进行处理

代码如下:

1 importjson2 #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": "13817120001"15 }16 }17 """

18 date_json =json.loads(SendRegisterVerificationCodejson_txt)19 print(date_json)20 print("*"*10)21 #发送时,每次需要注册新的手机号码,就需要json每次提示mobileTel的value进行发送

22 #遍历json文件所有的key对应的value

23 dic ={}24 defjson_txt(dic_json):25 if isinstance(dic_json,dict): #判断是否是字典类型isinstance 返回True false

26 for key indic_json:27 if isinstance(dic_json[key],dict):#如果dic_json[key]依旧是字典类型

28 print("****key--:%s value--: %s"%(key,dic_json[key]))29 json_txt(dic_json[key])30 dic[key] =dic_json[key]31 else:32 print("****key--:%s value--: %s"%(key,dic_json[key]))33 dic[key] =dic_json[key]34

35 json_txt(date_json)36 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)

完整代码:

1 importjson2 """

3 实现:4 1.json_txt(dic_json):json格式,遍历key,value,存储到字典中5 2.heck_json_value(dic_json,k,v)json格式,遍历后,替换key的value值6 3.data_Json(Sendjson_txt),将json字符串转化为json格式7 """

8

9 #json序列化json格式

10 defdata_Json(Sendjson_txt):11 data_json =json.loads(Sendjson_txt)12 print('data_json:',data_json)13 returndata_json14

15 #遍历json文件所有的key对应的value,存储到一个字典中

16 dic ={}17 defjson_txt(dic_json):18 if isinstance(dic_json,dict): #判断是否是字典类型isinstance 返回True,false

19 for key indic_json:20 if isinstance(dic_json[key],dict):#如果dic_json[key]依旧是字典类型

21 print("****key--:%s ,value--: %s"%(key,dic_json[key]))22 #递归调用

23 json_txt(dic_json[key])24 dic[key] =dic_json[key]25 else:26 print("****key--:%s ,value--: %s"%(key,dic_json[key]))27 dic[key] =dic_json[key]28

29

30 #遍历json字典key值后,查到ke则修改值value

31 defcheck_json_value(dic_json,k,v):32 ifisinstance(dic_json,dict):33 for key indic_json:34 if key ==k:35 dic_json[key] =v36 elifisinstance(dic_json[key],dict):37 check_json_value(dic_json[key],k,v)38

39 if __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 },51 "payload": {52 "mobileTel": "13817120001"53 }54 }55 """

56 #格式化

57 data_json =data_Json(Sendjson_txt)58 print('data_json:',data_json)59 print("*"*10)60 #61 json_txt(data_json)62 print("dic ---:"+str(dic))63

64 #65 print("data_json 变更前 :")66 print(data_json)67 check_json_value(data_json,'mobileTel','13333333333')68 print("data_json 变更后 :")69 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_python json格式参数遍历所有key、value 及替换key对于的value相关推荐

  1. 在python中使用json格式存储数据

    在python中使用json格式存储数据 代码如下: import jsonlist1 = [{'A': [1, 2, 3, 4, 5, 6], 'B': [3, 4, 5, 6, 7]},{'C': ...

  2. python生成json_如何将Python数组转为Json格式数据并存储?

    在Python中将数组转为Json数据存储时需要用到将json模块中的json.dumps()或者json.dump()方法. ·json.dumps()方法用法 使用json.dumps( )方法将 ...

  3. python知识:json格式文本;异常处理;字符串处理;unicode类型和str类型转换

    python知识:json格式文本:异常处理:字符串处理:unicode类型和str类型转换 参考文章: (1)python知识:json格式文本:异常处理:字符串处理:unicode类型和str类型 ...

  4. Spring拦截器校验Json格式参数

    Json已经成为一种主流的数据传输格式,请求参数是整个RequestBody. 那么,拦截器中如何获取Json呢? 办法是:通过request.getInputStream. RequestBody是 ...

  5. Python 使用Schema 实现接口或方法的JSON格式参数的高效、优雅校验

    我们在实际开发过程中,在开发对外开放接口或者公共模块方法,通常会对入参进行校验,当入参为JSON (Dict)类型数据时,可能需要写几十行代码来校验其数据格式是否符合正确,使得代码冗余度高,可读性差. ...

  6. python 把数据 json格式输出

    有个要求需要在python的标准输出时候显示json格式数据,如果缩进显示查看数据效果会很好,这里使用json的包会有很多操作 import jsondate = {u'versions': [{u' ...

  7. jsp中jquery传值给Java_jsp中利用jquery+ajax在前后台之间传递json格式参数

    经过一段时间的实验琢磨,终于将前后台之间的参数传递搞定了,实验所用工具myeclipse+structs1.2. 总结:容易出错的地方:1.ajax中data的格式一定要写对,这里举了两种形式,一种是 ...

  8. ajax前端post请求json格式参数,前端js导出,参数以json格式发送post请求

    //下载excel文件 downLoadFile(url: any, data: any, fileName: any) { let other=this;//other.messageService ...

  9. python生成json_Python JSON 教程

    Python JSON 教程 本文我们通过示例学习python中解析.读取和写入json.同时也涉及到转换json至字典和格式化打印. 1. json 介绍 JSON (JavaScript Obje ...

最新文章

  1. caffe的python接口学习(6):用训练好的模型(caffemodel)来分类新的图片
  2. Python处理pdf文件库 - PyPDF2详解
  3. 前端学习(1041):todolist--html界面
  4. 数字化转型难?那是你没搞懂这5个关键点
  5. linux下docker部署nginx
  6. 队列管理器连接数设置_详解!基于Redis解决业务场景中延迟队列的应用实践,你不得不服啊...
  7. 网络编程聊天室----服务器端
  8. .NET方向高级开发人员面试时应该事先考虑的问题
  9. 打开相机用鼠标画框,画下一个时上一个消失
  10. SQL的导入excel数据
  11. SQL知识(浓缩版)快速入门(基础语法、概念)
  12. Java使用POI导出Excel
  13. MATLAB绘制垂直正态分布密度曲线
  14. React Native常用三方组件库大全
  15. 可视化IDE低代码开发平台
  16. Win10输入法移除未知区域设置(qad-Latn) 美式键盘
  17. 从0开始Go语言,用Golang搭建网站
  18. 我的世界手游服务器修改密码,阿瓦隆之王怎么修改密码 | 手游网游页游攻略大全...
  19. 6.论文学习Modality-aware Mutual Learning for Multi-modal Medical Image Segmentation
  20. linux module load, show, 包管理,找到包的路径

热门文章

  1. 【开发者必看】【push kit】推送服务典型问题合集3
  2. 同一个文件夹下的文件进行复制操作,并且重命名的Linux命令
  3. 顶尖学术盛宴,CADD计算机辅助药物设计,AIDD人工智能药物发现与深度学习基因组概述
  4. python根据品种散点图鸢尾花_python机器学习入门到精通--实战分析(三)
  5. 多线程产生死锁的四个必要条件
  6. 【UGUI】Scroll View滚动视图
  7. 一院与哈工大大数据集团开展座谈交流
  8. ⭐算法入门⭐《哈希表》中等05 —— LeetCode 215. 数组中的第K个最大元素
  9. FastChat(小羊驼模型)部署体验
  10. HTML如何给页面设置滚动条 (简单,通俗易懂)