**快速总结:**我想做一个GET请求,其中响应体被转换为标准的JSON格式,这样我就可以在设置环境变量时指向那些非常JSON的对象,这些环境变量将在后续的POST中被引用。
**详细背景:**正在处理从excel工作表中遍历无线接入点(AP)列表的各种集合。此特定集合对excel列表中的每个AP都有一个GET和一个后续POST:其目的是向ARUBA CENTRAL API发送GET请求,以根据excel中的SERIAL#值获取特定AP的配置(10个属性)。然后发送回具有11个属性的POST请求以重新配置AP:
- 7个属性保持不变,因此从初始GET响应体引用
1.两个属性发生变化,其值取自excel工作表(简单)
1.两个属性是静态的(简单)
然后,它将继续在Excel中查找下一个序列号,以获取下一组get/post请求,依此类推。
**问题摘要:**只有问题#1的帖子:我一直在使用这种方法为许多不同的API调用ARUBA CENTRAL取得了很大的成功.然而,在这种情况下,特定的API调用返回一个响应体,这不是在典型的JSON格式我习惯处理,你会看到下面:
获取:
{{base_url}}/configuration/v1/ap_settings_cli/{{SERIAL}}
字符串
->这将向Aruba Central的API发送一个GET,其中SERIAL的值取自Excel工作表。
答复机构
[
"per-ap-settings ab:xz:1x:5y:3c:65",
" hostname room-1-ap",
" ip-address 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 \"\"",
" wifi0-mode access",
" wifi1-mode access",
" g-channel 0 -127",
" a-channel 0 -127",
" a-external-antenna 0",
" g-external-antenna 0",
" zonename _#ALL#_"
]
型
-> Response Headers -> Content-Type:application/json,但这不是我习惯处理的典型JSON格式。需要典型JSON格式,以便TESTS部分工作
我的想法是将响应正文修改为以下标准JSON格式:
对响应机构的建议修改
{
"per-ap-settings": "ab:xz:1x:5y:3c:65",
"hostname": "room-1-ap",
"ip-address": "0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 \"\"",
"wifi0-mode": "access",
"wifi1-mode": "access",
"g-channel": "0 -127",
"a-channel": "0 -127",
"a-external-antenna": "0",
"g-external-antenna": "0",
"zonename": "_#ALL#_"
}
型
如果我能以这种格式得到它们,我相信下面的代码行将工作:
当前测试(在GET请求下)
pm.environment.set("per-ap-settings", pm.response.json().per-ap-settings);
pm.environment.set("hostname", pm.response.json.hostname);
pm.environment.set("ip-address", pm.response.json().ip-address);
pm.environment.set("wifi0-mode", pm.response.json().wifi0-mode);
pm.environment.set("wifi1-mode", pm.response.json().wifi1-mode);
pm.environment.set("g-channel", pm.response.json().g-channel);
pm.environment.set("a-channel", pm.response.json().a-channel);
型
下面是随后的POST失败,因为环境变量没有被设置(从GET),它们没有被设置,因为我的响应体不是典型的JSON格式。
注意引用的7个环境变量。还要注意AGAIN和GGAIN是从excel工作表的AGAIN和GGAIN标题下的值中检索的变量。最后注意zoneA和newsite是静态值。重申一下,POST的唯一问题是7个环境变量的值没有被设置,而是显示为NULL:
POST REQUEST(引用前一次GET中的环境变量)
{
"clis": [
"per-ap-settings {{per-ap-settings}}",
" hostname {{hostname}}",
" ip-address {{ip-address}}",
" wifi0-mode {{wifi0-mode}}",
" wifi1-mode {{wifi1-mode}}",
" g-channel {{g-channel}}",
" a-channel {{a-channel}}",
" a-external-antenna {{AGAIN}}",
" g-external-antenna {{GGAIN}}",
" zonename zoneA",
" rf-zone newsite"
]
}
型
我尝试了什么使用我公司的chatgpt版本将responsebody从GET请求转换为正确的JSON格式时,生成了多个失败的JavaScript模板(这样我就可以适当地引用环境变量)。我在GET REQUEST中的TESTS中插入了这些模板。目前,我删除了设置环境变量,这样我就可以专注于JavaScript模板,并查看我的控制台日志,在那里我记录了新的输出。然而,我得到的最好的是以下内容:
CONSOLE OUTPUT(转换为正确的JSON格式):
{per-ap-settings: "ab:xz:1x:5y:3c:65", "": " zonename _#ALL#_"}
per-ap-settings: "ab:xz:1x:5y:3c:65"
"": " zonename _#ALL#_"
型
主要编辑!!
我的新Chatgpt生成的代码已经让我达到了99%的目标。我只需要帮助:
1.我不想删除以下4个出现在有“ip地址”字样的行末尾的字符:
“”
1.我需要确保我的pm.environment.set行的syntac是正确的。我不认为他们现在是正确的。
新代码(在GET REQUEST下测试):
// Get the response body as a JSON object
responseBody = pm.response.json();
// Initialize an empty object to store the JSON format
const jsonFormat = {};
// Iterate through each line in the response body array
responseBody.forEach(line => {
// Remove extra spaces and split the line by space to get the key-value pair
// Exclude escaped quotes from being split
const [key, ...valueParts] = line.trim().split(/(?<!\\) /);
// Join the value parts back together and add the key-value pair to the jsonFormat object
jsonFormat[key] = valueParts.join(' ');
});
// Log the jsonFormat object to the console
console.log(jsonFormat);
console.log(jsonFormat["per-ap-settings"])
console.log(jsonFormat.hostname);
console.log(jsonFormat["ip-address"])
console.log(jsonFormat["wifi0-mode"])
console.log(jsonFormat["wifi1-mode"])
console.log(jsonFormat["g-channel"])
console.log(jsonFormat["g-channel"])
// If you want to set the converted JSON as an environment variable, uncomment the following line:
// pm.environment.set("convertedJson", JSON.stringify(jsonFormat));
pm.environment.set("hostname", pm.response.json().hostname);
pm.environment.set("per-ap-settings", pm.response.json["per-ap-settings"]);
pm.environment.set("ip-address", pm.response.json["ip-address"]);
pm.environment.set("wifi0-mode", pm.response.json["wifi0-mode"]);
pm.environment.set("wifi1-mode", pm.response.json["wifi1-mode"]);
pm.environment.set("g-channel", pm.response.json["g-channel"]);
pm.environment.set("a-channel", pm.response.json["a-channel"]);
型
这是新的控制台->注意“ip-address”行中缺少的两个\
{per-ap-settings: "dc:b7:ac:cd:e1:7e", hostname: "fw-cp-125-eorwdw-ap", ip-address: "0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 """…}
per-ap-settings: "dc:b7:ac:cd:e1:7e"
hostname: "fw-cp-125-eorwdw-ap"
ip-address: "0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 """
wifi0-mode: "access"
wifi1-mode: "access"
g-channel: "0 -127"
a-channel: "0 -127"
a-external-antenna: "0"
g-external-antenna: "0"
zonename: "_#ALL#_"
"dc:b7:ac:cd:e1:7e
"fw-cp-125-eorwdw-ap"
"0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 """
"access"
"access"
"0 -127"
"0 -127"
型
1条答案
按热度按时间7eumitmz1#
当你记录一个字符串的时候,控制台日志不会显示转义字符,但是它们是存在的。
例如...
字符串
返回与您在控制台日志中的内容相同的内容。
的数据
如果我使用这个环境变量来驱动下一个针对Postman Echo的请求。
的
你可以看到转义字符仍然存在。
的