POSTMAN -在后续POST请求之前将GET请求的响应修改为JSON格式-几乎完成-参见编辑

e5nqia27  于 2023-11-18  发布在  Postman
关注(0)|答案(1)|浏览(167)

**快速总结:**我想做一个GET请求,其中响应体被转换为标准的JSON格式,这样我就可以在设置环境变量时指向那些非常JSON的对象,这些环境变量将在后续的POST中被引用。
**详细背景:**正在处理从excel工作表中遍历无线接入点(AP)列表的各种集合。此特定集合对excel列表中的每个AP都有一个GET和一个后续POST:其目的是向ARUBA CENTRAL API发送GET请求,以根据excel中的SERIAL#值获取特定AP的配置(10个属性)。然后发送回具有11个属性的POST请求以重新配置AP:

  1. 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"

7eumitmz

7eumitmz1#

当你记录一个字符串的时候,控制台日志不会显示转义字符,但是它们是存在的。
例如...

const response = pm.response.json();

let newObj = {}

response.forEach(element => {
    let split = element.trim().split(/(?<=^\S+)\s/);
    newObj[split[0]] = split[1]
})

console.log(newObj);
pm.environment.set("object",JSON.stringify(newObj))

字符串
返回与您在控制台日志中的内容相同的内容。


的数据
如果我使用这个环境变量来驱动下一个针对Postman Echo的请求。



你可以看到转义字符仍然存在。


相关问题