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接到参数后作更改序号操作. 前端页面发送请求的代 ...
随机推荐
- mongodb在linux 上要注意的一些东西
没有配成开机启动服务,在bin目录下还要使用./mongod去启动,暂时先这样,另外要说的是, child process failed, exited with error number 1说明配置 ...
- Vue&webpack入门实践
目录 1. 下载安装Vue 2. Vue 2.1 Vue要素 2.2 指令 2.3 组件化 2.4 vue-router 3. webpack 3.1 webpack简介 3.2 四个核心概念 3.3 ...
- HDU 6470 /// 矩阵快速幂
题目大意: f[1]=1 f[2]=2 f[n]=f[n-1]+2*f[n-2]+n^3 在某博客截的图 现在忘记原博位置了 抱歉 根据递推式1和递推式3构造出两个矩阵 #include <bi ...
- min-element & max_element
C++ STL之min_element()与max_element()(取容器中的最大最小值) min_element()和max_element 头文件:#include<algorithm& ...
- MVC的实体模型写在类库,为什么被其他类库调用时,用不了模型的表?
一,很简单,由于第一次添加实体模型时,VS会自动帮你添加引用System.Data.Entity到当前类库,如下图示: 二,而手动添加的类库并不存在这个引用,则及时你引用了当前的实体模型的类库,却使用 ...
- ubuntu16.04安装jdk1.8(java1.8)
使用ppa方式安装 1.添加ppa $sudo add-apt-repository ppa:webupd8team/java $sudo apt-get update 2.安装oracle-java ...
- oracle创建表空间自增空间管理
表空间(tablespace).段(segment).区(extent).块(block),这些都是oracle数据库在数据文件中组织数据的基本单元 1.创建表空间create tablespace ...
- PHP 与Python 读取大文件的区别
php读取大文件的方法 <?php function readFile($file) { # 打开文件 $handle = fopen($file, 'rb'); while (feof($ ...
- 2018-8-10-win10-uwp-httpClient-登陆CSDN
title author date CreateTime categories win10 uwp httpClient 登陆CSDN lindexi 2018-08-10 19:16:53 +080 ...
- 如何将excel表格中的纯数字删掉 空白行,然后删除
excel里如何删除一列中全部数字 1.选择目标区域2.按“F5”,定位条件如下设置,即可选中值为数字的单元格,在按Del. 空白行删除 选择空值,确定,就会将所有空白行选定,然后删除