Postman - 如何替换 JSON 响应中所有特定属性的值,以便稍后将其用作另一个请求的正文
Postman - How to replace values for all specific properties in the JSON Response, to use it later as another Request's Body
我有 2 API 个请求。第一个是 GET,即 returns 一个响应。此响应在第二个请求 (POST) 中用作 Body/Payload。但是在第二次请求中使用之前,Payload 应该有某些值要被替换(在我下面的例子中,它应该是 "Status" 属性 的值)。
我该怎么做?
这是我的示例响应:
{
"Variations":[
{
"ItemIds":[
"xxx"
],
"Items":[
{
"Id":"67-V1",
"GuId":"xxx",
"Type":"Unit",
"Status":"Active"
}
],
"Name":"VAR 1",
"Id":"67-V1"
},
{
"ItemIds":[
"yyy"
],
"Items":[
{
"Id":"67-V2",
"GuId":"yyy",
"Type":"Unit",
"Status":"Active"
}
],
"Name":"VAR 2",
"Id":"67-V2"
},
{
"ItemIds":[
"zzz"
],
"Items":[
{
"Id":"67-V3",
"GuId":"zzz",
"Type":"Unit",
"Status":"Active"
}
],
"Name":"VAR 3",
"Id":"67-V3"
}
],
"ItemIds":[
],
"Items":[
],
"Name":"MAINP",
"Id":"67",
"Color":null
}
这是我的代码,但它似乎不起作用(替换部分):
var jsonData = pm.response.json();
function replaceStatus() {
_.each(jsonData.Variations, (arrayItem) => {
if(arrayItem.Items.Status !== "NonActive") {
arrayItem.Items.Status == "NonActive";
console.log("arrayItem " + arrayItem);
}
});
}
pm.test("Run Function", replaceStatus ());
pm.sendRequest({
url: 'localhost:3000/post',
method: 'POST',
headers: {
"Content-Type": "application/json"
},
body: {
mode: 'raw',
raw: JSON.stringify(jsonData)
}
}, (err, res) => {
console.log(res)
})
我猜您正试图用 Active
替换所有 NonActive
值。在这种情况下,您应该使用 =
而不是 ==
进行赋值。您提供的 JSON 文件无效,无法在我的机器上 运行 您的代码。如果这不起作用,我很乐意仔细观察
根据您的更新,需要进行这些更改
1- 为了处理 JSON 对象,您需要按原样解析响应 string
并且您不能在 [=32= 上调用 JsonData.Variations
之类的东西] 确定 jsonData
是一个 JSON 对象。如果不添加这样的东西来解析它
var parsedJson = JSON.parse(jsonData)
2- 您似乎错过了函数中的一个数组层来迭代 items
。由于您有两个嵌套数组来达到 Status
,因此 replaceStatus
函数应如下所示
function replaceStatus() {
_.each(parsedJson.Variations, (arrayItem) => {
_.each(arrayItem.Items, (item) => {
if(item.Status !== "NonActive") {
item.Status = "NonActive";
console.log("arrayItem " + item.Status);
}
});
});
}
您 post 是在测试部分还是只编辑了一部分代码?
我从您的一条评论中看到,您看不到记录到控制台的输出。
这可能非常微不足道,但是,如果您完成了 post 整个代码,看起来您可能忘记了在 post 调用之前调用 replaceStatus()
函数。
我有 2 API 个请求。第一个是 GET,即 returns 一个响应。此响应在第二个请求 (POST) 中用作 Body/Payload。但是在第二次请求中使用之前,Payload 应该有某些值要被替换(在我下面的例子中,它应该是 "Status" 属性 的值)。
我该怎么做?
这是我的示例响应:
{
"Variations":[
{
"ItemIds":[
"xxx"
],
"Items":[
{
"Id":"67-V1",
"GuId":"xxx",
"Type":"Unit",
"Status":"Active"
}
],
"Name":"VAR 1",
"Id":"67-V1"
},
{
"ItemIds":[
"yyy"
],
"Items":[
{
"Id":"67-V2",
"GuId":"yyy",
"Type":"Unit",
"Status":"Active"
}
],
"Name":"VAR 2",
"Id":"67-V2"
},
{
"ItemIds":[
"zzz"
],
"Items":[
{
"Id":"67-V3",
"GuId":"zzz",
"Type":"Unit",
"Status":"Active"
}
],
"Name":"VAR 3",
"Id":"67-V3"
}
],
"ItemIds":[
],
"Items":[
],
"Name":"MAINP",
"Id":"67",
"Color":null
}
这是我的代码,但它似乎不起作用(替换部分):
var jsonData = pm.response.json();
function replaceStatus() {
_.each(jsonData.Variations, (arrayItem) => {
if(arrayItem.Items.Status !== "NonActive") {
arrayItem.Items.Status == "NonActive";
console.log("arrayItem " + arrayItem);
}
});
}
pm.test("Run Function", replaceStatus ());
pm.sendRequest({
url: 'localhost:3000/post',
method: 'POST',
headers: {
"Content-Type": "application/json"
},
body: {
mode: 'raw',
raw: JSON.stringify(jsonData)
}
}, (err, res) => {
console.log(res)
})
我猜您正试图用 Active
替换所有 NonActive
值。在这种情况下,您应该使用 =
而不是 ==
进行赋值。您提供的 JSON 文件无效,无法在我的机器上 运行 您的代码。如果这不起作用,我很乐意仔细观察
根据您的更新,需要进行这些更改
1- 为了处理 JSON 对象,您需要按原样解析响应 string
并且您不能在 [=32= 上调用 JsonData.Variations
之类的东西] 确定 jsonData
是一个 JSON 对象。如果不添加这样的东西来解析它
var parsedJson = JSON.parse(jsonData)
2- 您似乎错过了函数中的一个数组层来迭代 items
。由于您有两个嵌套数组来达到 Status
,因此 replaceStatus
函数应如下所示
function replaceStatus() {
_.each(parsedJson.Variations, (arrayItem) => {
_.each(arrayItem.Items, (item) => {
if(item.Status !== "NonActive") {
item.Status = "NonActive";
console.log("arrayItem " + item.Status);
}
});
});
}
您 post 是在测试部分还是只编辑了一部分代码? 我从您的一条评论中看到,您看不到记录到控制台的输出。
这可能非常微不足道,但是,如果您完成了 post 整个代码,看起来您可能忘记了在 post 调用之前调用 replaceStatus()
函数。