Postman—如何替换JSON响应中所有特定属性的值,以便稍后将其用作另一个请求';身体

Postman—如何替换JSON响应中所有特定属性的值,以便稍后将其用作另一个请求';身体,postman,postman-collection-runner,Postman,Postman Collection Runner,我有2个API请求。第一个是GET,它返回一个响应。该响应用作第二个请求(POST)中的主体/有效负载。但是在第二次请求中使用之前,有效负载应该有一些要替换的值(在我下面的例子中,它应该是“Status”属性的值) 我怎么做 以下是我的回答示例: { "Variations":[ { "ItemIds":[ "xxx" ], "Items":[ {

我有2个API请求。第一个是GET,它返回一个响应。该响应用作第二个请求(POST)中的主体/有效负载。但是在第二次请求中使用之前,有效负载应该有一些要替换的值(在我下面的例子中,它应该是“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
}
这是我的代码,但似乎不起作用(替换部分):


我猜您正在尝试将所有
非活动
值替换为
活动
。在这种情况下,您应该使用
=
进行分配,而不是
=
。您提供的JSON文件无效,无法在我的计算机上运行您的代码。如果这不起作用,我很高兴能仔细看看

需要根据您的更新进行这些更改

1-为了处理JSON对象,您需要解析响应,因为它是
string
,并且您不能调用类似
JsonData的东西。在该对象上的变体是
JsonData
。请确保
JsonData
是JSON对象。如果没有添加这样的东西来解析它

var parsedJson = JSON.parse(jsonData)
2-您似乎错过了函数中迭代
项的一个数组层
。由于有两个嵌套数组要达到
状态
replaceStatus
函数应如下所示

function replaceStatus() {
    _.each(parsedJson.Variations, (arrayItem) => {
        _.each(arrayItem.Items, (item) => {
            if(item.Status !== "NonActive") {
                item.Status = "NonActive";
                console.log("arrayItem " + item.Status);
            }
        });
    });
}

我猜您正在尝试将所有
非活动
值替换为
活动
。在这种情况下,您应该使用
=
进行分配,而不是
=
。您提供的JSON文件无效,无法在我的计算机上运行您的代码。如果这不起作用,我很高兴能仔细看看

需要根据您的更新进行这些更改

1-为了处理JSON对象,您需要解析响应,因为它是
string
,并且您不能调用类似
JsonData的东西。在该对象上的变体是
JsonData
。请确保
JsonData
是JSON对象。如果没有添加这样的东西来解析它

var parsedJson = JSON.parse(jsonData)
2-您似乎错过了函数中迭代
项的一个数组层
。由于有两个嵌套数组要达到
状态
replaceStatus
函数应如下所示

function replaceStatus() {
    _.each(parsedJson.Variations, (arrayItem) => {
        _.each(arrayItem.Items, (item) => {
            if(item.Status !== "NonActive") {
                item.Status = "NonActive";
                console.log("arrayItem " + item.Status);
            }
        });
    });
}

您是否在测试部分发布了全部代码,或者只是其中的一部分? 我从您的一条评论中看到,您无法看到记录到控制台的输出


这可能很简单,但是,如果您发布了整个代码,那么您可能忘记了在post调用之前调用
replaceStatus()
函数。

您是否在测试部分发布了整个代码,或者只是其中的一部分? 我从您的一条评论中看到,您无法看到记录到控制台的输出


这可能非常琐碎,但是,如果您发布了整个代码,那么您可能忘记了在post调用之前调用
replaceStatus()
函数。

谢谢@Mehran!我已经更正了JSON响应(在原始消息中)。我也试着用“=”代替“=”。但它似乎仍然不起作用。或者可能是我做得不对。也就是说,我看不到这一行输出到控制台-
Console.log(“arrayItem”+arrayItem)我也不确定如何更新jsonData(在值被替换之后)。@KVN通过在在线JSON linter中测试JSON使其有效。我很确定这个解决方案在我的机器上试过后是有效的。也可以在不解析JSON的情况下尝试它,因为我怀疑代码第一行中的“.JSON”会解析它,然后您会逐字解析它两次谢谢@Mehran!是的,似乎额外的解析是不必要的。而且它似乎起作用了!(顺便说一句,在我看到你最后的回复之前,我删除了我的最后一条评论,并打算对其进行一些修改)。非常感谢你的帮助!谢谢@Mehran!我已经更正了JSON响应(在原始消息中)。我也试着用“=”代替“=”。但它似乎仍然不起作用。或者可能是我做得不对。也就是说,我看不到这一行输出到控制台-
Console.log(“arrayItem”+arrayItem)我也不确定如何更新jsonData(在值被替换之后)。@KVN通过在在线JSON linter中测试JSON使其有效。我很确定这个解决方案在我的机器上试过后是有效的。也可以在不解析JSON的情况下尝试它,因为我怀疑代码第一行中的“.JSON”会解析它,然后您会逐字解析它两次谢谢@Mehran!是的,似乎额外的解析是不必要的。而且它似乎起作用了!(顺便说一句,在我看到你最后的回复之前,我删除了我的最后一条评论,并打算对其进行一些修改)。非常感谢你的帮助!感谢@Derryl Thomas指出这一点。我真的很想实际使用它:/现在添加了它。感谢@Derryl Thomas指出这一点。我真的不知道该怎么使用它了。