python json文件遍歷所有key、value 及替換key對於的value


對於接口自動化測試,一般接口以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'}}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM