MeterSphere使用Python后置脚本获取Json响应数据作为下一个接口参数
MeterSphere使用Python后置脚本获取Json响应数据作为下一个接口参数
前提:
因删除应用需要用到应用id,但列表中的应用很多,需要查到对应的应用名称获得对应的应用id
解决方法:通过Python获取json数据,并比对应用名称获得应用id
该查询应用请求接口返回的响应体:
{
"result": true,
"message": null,
"data": [
{
"appTypeId": "1",
"appTypeName": "智慧教学",
"apps": [
{
"appId": "03AAED47086C2D3E8E14E97069356FBB",
"appName": "移动门户",
"appOldName": null,
"skipUrl": "http://10.4.3.8:12207?token=27509A885657461E893FD026DD0048F8&orgcode=8651010000002",
"url": "http://10.4.3.8:12207?token={token}&orgcode={orgcode}",
"provide": "198",
"protocolNum": "0",
"tokenNum": null,
"enable": null,
"tokenTime": "1626255328365.56",
"version": "1.03",
"model": "3",
"ifDelete": "0",
"imgUrl": "icon/2/JF_ISMPA.png",
"remark": "",
"ifEnable": "1"
},
{
"appId": "D74728051B02F597366A78AFAC144CD8",
"appName": "课堂生态",
"appOldName": null,
"skipUrl": "http://10.4.3.8:12202/build/index.html?token=27509A885657461E893FD026DD0048F8&orgcode=8651010000002",
"url": "http://10.4.3.8:12202/build/index.html?token={token}&orgcode={orgcode}",
"provide": "198",
"protocolNum": "0",
"tokenNum": null,
"enable": null,
"tokenTime": "1626255328365.7",
"version": "2.31",
"model": "3",
"ifDelete": "0",
"imgUrl": "icon/2/JF_ISCEM2.31.png",
"remark": "",
"ifEnable": "1"
},
{
"appId": "F0279637C91520BB82941C8E37930982",
"appName": "基础平台",
"appOldName": null,
"skipUrl": "http://10.4.3.8:12201/index.html#/home/loading?token=27509A885657461E893FD026DD0048F8&orgcode=8651010000002",
"url": "http://10.4.3.8:12201/index.html#/home/loading?token={token}&orgcode={orgcode}",
"provide": "198",
"protocolNum": "0",
"tokenNum": null,
"enable": null,
"tokenTime": "1626255328365.72",
"version": "2.0",
"model": "3",
"ifDelete": "0",
"imgUrl": "icon/2/JF_ISBMP2.0.png",
"remark": "",
"ifEnable": "1"
}
],
"appNx": [],
"enable": "1"
},
{
"appTypeId": "2",
"appTypeName": "智慧管理",
"apps": [
{
"appId": "743E113BFCD84CAEB9A46405FB4DB1F6",
"appName": "基础test",
"appOldName": null,
"skipUrl": "http://10.10.0.59:1222/?orgCode=8651010000002&token=27509A885657461E893FD026DD0048F8",
"url": "http://10.10.0.59:1222/?orgCode={orgcode}&token={token}",
"provide": "198",
"protocolNum": "0",
"tokenNum": null,
"enable": null,
"tokenTime": "1626255328365.75",
"version": "3.1",
"model": "2",
"ifDelete": "1",
"imgUrl": "icon/4/基础test2021-7-13-102419.jpg",
"remark": "",
"ifEnable": "1"
}
],
"appNx": [],
"enable": "1"
},
{
"appTypeId": "3",
"appTypeName": "智慧考试",
"apps": [],
"appNx": [],
"enable": "1"
},
{
"appTypeId": "4",
"appTypeName": "其他",
"apps": [],
"appNx": [],
"enable": "1"
}
],
"code": null,
"total": 0,
"timeStamp": null
}
后置脚本获取json
操作步骤:
import json
def list_get_index(l_list, key, value):
"""list元素为dict,根据dict中某个元素值返回list索引"""
index = 0
for dic in l_list:
if dic[key] == value:
return index
index += 1
res = prev.getResponseDataAsString() #res为响应结果,类型为unicode
dic_res = json.loads(res) #将unicode转为dict
u_list_apps = dic_res['data'][0]['apps'] #格式为list,其中数据为带u的unicode格式
print(u_list_apps)
print(type(u_list_apps))
deunicode_apps = str(u_list_apps).decode('utf-8').replace('\'','\"').decode('unicode-escape').replace('u\"','\"') #去掉u之后的unicode格式\
print(deunicode_apps) #不带u的uicode格式
print(type(deunicode_apps))
list_apps = eval(deunicode_apps)
print(list_apps)
print(type(list_apps))
index = list_get_index(list_apps, 'appName', "\xe6\xb5\x8b\xe8\xaf\x95\xe6\x96\xb0\xe5\xa2\x9e\xe5\xba\x94\xe7\x94\xa8") # 获取data中目标字典的索引
appId = list_apps[index]['appId']
print(appId)
vars.put("appId", appId) #设置变量
控制台输出结果:
获得的应用id:
appId:0530E23590F742E2A845637D8E9B192F
在删除应用接口中的使用:
{
"version": "2.0",
"data": {
"AppID": "${appId}"
},
"token": "${userToken}",
"orgcode": "8651010000002",
"Operation": {
"UserID": "admin",
"UserName": "admin",
"UserType": "0",
"OpType": "删除",
"OpRemark": "删除"
}
}
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现