python全面解析接口返回?cái)?shù)據(jù)
解析接口返回?cái)?shù)據(jù)
1、把json格式的數(shù)據(jù)
轉(zhuǎn)換成單個(gè){key,value}的形式,并把每個(gè)dict存入list
def parse(self,data): #解析json格式的數(shù)據(jù) ,生成list
for key, value in data.items():
if isinstance(value, dict):
self.parse(value)
elif isinstance(value, list):
for k in range(len(value)):
# 由于list沒有items,所以一個(gè)一個(gè)遍歷lis里面的值,然后針對(duì)list的每一個(gè)項(xiàng) 進(jìn)行解析
self.parse(value[k])
else:
self.L.append({key: value})
return self.L
2、把 變成list的request 和expect一一對(duì)比
得知預(yù)期值和返回值是否是相符合
def compare(self,resjson,targjson): #比較兩個(gè)數(shù)值返回,如果相等,則返回True,否則返回false
self.init()
res_list = self.parse(resjson)
self.init()
targ_list = self.parse(targjson)
count = len(targ_list)
while count:
if targ_list[count - 1] in res_list: # list里面,成員運(yùn)算符,in or not in
count -=1
else:
return False
return True
3、測(cè)試一下看是否正確
if __name__ == "__main__":
t = Tools()
request = {
"head": {
"clientId": "12",
"appUDID": "",
"appVersion": "",
"channelId": "",
"innerMedia": "",
"outerMedia": "",
"subClientId": "h5",
"origin": "",
"test":[{"hahah":"haha"}]
},
"body": {
"userName": "your user name",
"password": "password"
}
}
expect = {"username":"your user name","password":"password"}
# print(t.parse(request))
print(t.compare(request,expect))
結(jié)果:返回True or False,因?yàn)閡sername兩邊大小寫不一致,所以返回為False

小結(jié):這個(gè)parse加compare函數(shù),就可以在接口返回結(jié)果時(shí)候,直接assert(),得出true or false
完整代碼
class Tools:
def __init__(self):
self.L = []
def init(self):
self.L = []
def parse(self,data): #解析json格式的數(shù)據(jù) ,生成list
for key, value in data.items():
if isinstance(value, dict):
self.parse(value)
elif isinstance(value, list):
for k in range(len(value)): # 由于list沒有items,所以一個(gè)一個(gè)遍歷lis里面的值,然后針對(duì)list的每一個(gè)項(xiàng) 進(jìn)行解析
self.parse(value[k])
else:
self.L.append({key: value})
return self.L
def compare(self,resjson,targjson): #比較兩個(gè)數(shù)值返回,如果相等,則返回True,否則返回false
self.init()
res_list = self.parse(resjson)
self.init()
targ_list = self.parse(targjson)
count = len(targ_list)
while count:
if targ_list[count - 1] in res_list: # list里面,成員運(yùn)算符,in or not in
count -=1
else:
return False
return True
python請(qǐng)求接口,抓取返回的數(shù)據(jù)
代碼如下
# 引入包
import urllib2
import json
import sys
url = 'http://alisleepy.top' # 接口地址
responseResult = urllib2.urlopen(url, None, timeout=2000)
code = responseResult.getcode()
print '接口狀態(tài)碼:' + str(code)
if code != 200:
sys.exit('request failed,please check interface is correct!')
# 檢查數(shù)據(jù),是否符合預(yù)期
data = json.loads(responseResult.read()) # 反序列化json數(shù)據(jù)
print 'code碼:' + str(data['code])
print 'msg信息:' + str(data['msg'])
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
django js實(shí)現(xiàn)部分頁面刷新的示例代碼
今天小編就為大家分享一篇django js實(shí)現(xiàn)部分頁面刷新的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05
pandas進(jìn)行數(shù)據(jù)的交集與并集方式的數(shù)據(jù)合并方法
今天小編就為大家分享一篇pandas進(jìn)行數(shù)據(jù)的交集與并集方式的數(shù)據(jù)合并方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06
Python實(shí)現(xiàn)快速計(jì)算24點(diǎn)游戲的示例代碼
這篇文章主要為大家詳細(xì)介紹了Python如何實(shí)現(xiàn)快速計(jì)算24點(diǎn)游戲并獲取表達(dá)式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-12-12
pycharm運(yùn)行程序時(shí)在Python console窗口中運(yùn)行的方法
今天小編就為大家分享一篇pycharm運(yùn)行程序時(shí)在Python console窗口中運(yùn)行的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12
教女朋友學(xué)Python(一)運(yùn)行環(huán)境搭建
這篇文章主要介紹了教女朋友學(xué)Python(一)運(yùn)行環(huán)境搭建,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-11-11
django2用iframe標(biāo)簽完成網(wǎng)頁內(nèi)嵌播放b站視頻功能
這篇文章主要介紹了django2 用iframe標(biāo)簽完成 網(wǎng)頁內(nèi)嵌播放b站視頻功能,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06
python實(shí)現(xiàn)代碼審查自動(dòng)回復(fù)消息
這篇文章主要介紹了python實(shí)現(xiàn)代碼審查回復(fù)消息生成的示例,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2021-02-02

