邮递员-如何替换JSON响应中所有特定属性的值,以便稍后将其用作另一个请求的正文

时间:2019-07-31 20:56:10

标签: postman postman-collection-runner

我有2个API请求。第一个是GET,它返回一个响应。此响应在第二个请求(POST)中用作“正文/有效负载”。但是有效负载应具有某些值,才能在第二个请求中使用之前替换(在我的情况下,该值应为“状态”属性的值)。

我该怎么办?

这是我的示例响应:

aws s3 ls s3://BUCKET/ --recursive | %{ "aws s3api put-object-acl --bucket BUCKET --key "+$_.ToString().substring(30)+" --acl bucket-owner-full-control" }

这是我的代码,但似乎不起作用(替换部分):

{  
   "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
}

2 个答案:

答案 0 :(得分:1)

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

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

1-为了处理JSON对象,您需要解析响应string,而不能在其上调用类似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);
            }
        });
    });
}

答案 1 :(得分:1)

您是否将整个代码发布在测试部分或仅发布了一部分? 我从您的一条评论中看到,您看不到记录到控制台的输出。

这可能是非常琐碎的,但是,如果您确实发布了整个代码,则看起来您可能忘记了在调用调用之前调用replaceStatus()函数。