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() 函数。