作者:我的惟一fd | 来源:互联网 | 2023-06-14 08:27
我有一些从Postman发出的请求以JSON形式返回的Response主体数据。
示例:
{
"targets": {
"@uri": "/api/space/tag-management/tags/98304/targets","target": [
{
"@type": "vnd.net.juniper.space.device-management.device","@uri": "/api/space/tag-management/tags/98304/targets/98328","@href": "/api/space/device-management/devices/196657"
},{
"@type": "vnd.net.juniper.space.device-management.device","@uri": "/api/space/tag-management/tags/98304/targets/98329","@href": "/api/space/device-management/devices/196656"
},"@uri": "/api/space/tag-management/tags/98304/targets/98330","@href": "/api/space/device-management/devices/196655"
我一直试图从此数据中仅获取设备ID。
每个块都是一个设备。
@href末尾的数字值为设备ID-/ devices / 196655
我环顾四周,但对这方面的理解不足以解决我的问题。
我已经尝试过以下代码块:
var jsOnData= pm.response.json();
var results = [];
for (var i = 0; i var counter = jsonData.targets.target[i]['@href'].split(‘/‘);
results.push(counter[counter.length - 1]);
}
pm.environment.set("DeviceID",results.join(‘,’));
更新:
我找到了使用lodash的解决方案,但是在邮递员中调用该变量时遇到了麻烦。可能是客户端使用问题(我的错),而不是代码方面的问题。
这是我用来解决此问题的代码。
let body = pm.response.json().targets.target,ids = _.map(body,(id) => id['@href'].split("/")[5]);
pm.globals.set("DeviceID",ids)
此后,它将数据按我的需要放入一个全局变量中。
编辑:这是我遇到的新问题。
邮递员似乎无法在我的下一个请求的正文中识别出我的{{DeviceID}}变量调用。
在第二行中,您尝试解析json,但是第一行将响应设置为json,因此行to不必要。
如果您使用第一个代码块,但删除第二行并获得for循环使用响应,则它应该可以工作。
var jsOnData= pm.response.json();
var results = [];
for (var i = 0; i var counter = jsonData.targets.target[i][“@href”].split(‘/‘);
results.push(counter[counter.length - 1]);
}
// use me
// results.join(‘,’);
,
这是解决我问题的代码。
let body = pm.response.json().targets.target,ids = _.map(body,(id) => id['@href'].split("/")[5]);
pm.globals.set("DeviceID",ids)
还有另一个问题,那就是我体内没有填充全局变量,发现我有一个同名的环境变量和全局变量。
删除了Env var,问题已解决。