背景:接口关联
接口请求中经常需要一个接口的参数是另一个接口返回的数据,比如
token。
而后台返回的数据 token 值有时候会有多层嵌套,比如字典数组字典……等多层嵌套(如{[{token:“6782urfbudheu”}]}),位置不好找或不固定,这时候使用jsonpath 获取会很方便:
使用方式:$..code.注意:
使用$..的时候保证所求的参数没有重复参数名
使用方式描述:
后台返回的 json 数据是 {},接收数据使用rep = requests.request(),自己要获取的参数名为 "token",那么可以这么使用:
得到的是数组格式:lists
lists = jsonpath.jsonpath(rep.json(),'$..token')
token = lists[0]
完整代码示例:
#--------------jsonpath的使用--------------
import requests
import jsonpath
# url请求地址
url = "http://shop-xo.hctestedu.com/index.php?s=api/user/login"
#公共参数
comman_params = {
"application": "app",
"application_client_type": "weixin",
}
#请求参数
data = {
"accounts": "huace_xm",
"pwd": "123456",
"type":"username"
}
#发送请求
rep = requests.post(url=url,
params=comman_params,
data=data)
print("返回数据:\n",rep.json())
# 获取 token-----------------------用 jsonpath-获取 token,参数名不能一样,返回数据有且仅有一个 token 参数名----------------------------
lists = jsonpath.jsonpath(rep.json(), "$..token")
token = lists[0]
# 获得 token
print("用户token:\n",token)
# 获取 -----------------------用 jsonpath-获取 username----------------------------
username_lists = jsonpath.jsonpath(rep.json(), "$..username")
username = username_lists[0]
print("用户username:\n",username)
# 获取-------------------用 jsonpath-获取 msg-,如果只有一层字典,没有嵌套,也可使用$.msg、$..msg---------------------------
msg_lists = jsonpath.jsonpath(rep.json(), "$..msg")
msg_lists1 = jsonpath.jsonpath(rep.json(), "$.msg")
msg = msg_lists[0]
msg1 = msg_lists1[0]
print("消息内容$..msg:\n",msg)
print("消息内容$.msg:\n",msg)
注意事项:
使用$..的时候保证所求的参数没有重复参数名
在 pyCharm 的项目终端安装requests,jsonpath:
pip install requests
pip install jsonpath