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



我有2个API请求。第一个是获取的,它返回响应。此响应在第二请求中用作正文/有效载荷(帖子(。但是有效载荷应在第二请求中使用之前要替换某些值(在我的情况下为"状态"属性应该是值(。

我该怎么做?

这是我的示例响应:

{  
   "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,并且无法在该响应上像JsonData.Variations一样调用STH。请确保jsonData是JSON对象。如果不添加这样的sth来解析

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);
            }
        });
    });
}

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

这可能很琐碎,但是,如果您发布了整个代码,看来您可能已经忘记了在发布通话之前调用replaceStatus()功能。

最新更新