JSON stringify中的变量在Rest请求中不起作用

问题描述 投票:0回答:1

我正在尝试向REST API发送请求,我正在使用Javascript来准备和发送它。但是,当我使用JSON.Stringify写出对象所需的变量时,API说我缺少必需的字段。

我曾尝试将对象写入字符串,然后将其包含在代码中,我尝试将JSON.Stringify添加到代码中。什么都行不通。

我以这样的形式从已发布的字段构建数组“数据”:

var Data = {};
var fields;
var fieldName;
var fieldValue;
var fieldValueCleaned;
var emailCleaned;
var stingForJson;
stingForJson = "";
for(var i = 0; i < types.length; i++){

  fields = types[i].split("=");
  fieldName = fields[0];
  fieldValue = CleanupInj(fields[1]);
  fieldValue = decodeURIComponent(fieldValue);
  fieldValueCleaned = CleanUp(fieldValue);

  Data[fieldName] = fieldValueCleaned; 

  console.log( fieldName +" : "+ fieldValueCleaned);


}

如果我将JSON.stringify({Data})写入控制台,它就会正确地出现:

{
Data: {
        "Field1": "123562374563",
        "Field2": "https://giphy.com/gifs/borat-great-success-a0h7sAqON67nO/fullscreen",
        "Field3": "https://giphy.com/gifs/haZOqHKz9tTfW/fullscreen",
        "Field4": "[email protected]",
        "Field5": "Thisisme"
    }
}

但是,当我将变量添加到代码来执行请求时,它不起作用(如下所示)

fetch('https://MYAPIURL/v1/events', {
        method: "POST",
        cache: "no-cache",
        headers: {
            "Content-Type": "application/json",
            "Authorization": "Bearer " : "12321321321321",
        },
        body: JSON.stringify({
          "Field1": Data.Field1,
          "Field5": Data.Field5,

        }),
  Data: JSON.stringify({Data}),
    }
     )
  .then(function(res) {
    return res.json();
  }).then(function(json) {
    callback(null, json);
  });

它不起作用,因为Data中的值不会发送到服务器。

我甚至尝试将对象写入字符串,然后使用JSON.stringify将其放回到json对象:

stingForJson = JSON.stringify({Data});
stingForJson = stingForJson.slice(9,-2);
console.log("String for JSON = "+ stingForJson);

fetch('https://mc-hz56jzqd8k6ldx1sm7-s7xfbm.rest.marketingcloudapis.com/interaction/v1/events', {
        method: "POST",
        cache: "no-cache",
        headers: {
            "Content-Type": "application/json",
            "Authorization": "Bearer " + accessToken,
        },
        body: JSON.stringify({
          "ContactKey": Data.EmailAddress,
          "EventDefinitionKey": Data.EventDefinitionKey,
     Data:{stingForJson}
        }),
javascript json rest zapier stringify
1个回答
0
投票

你可能想要:

body: JSON.stringify({'Data': Data}),

因为根据fetch()的文件,Data不支持https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters财产

虽然JSON.stringify({Data})似乎产生相同的输出,但我建议使用我的语法,因为使外部名称(远程服务期望的那个)独立于变量的名称。

© www.soinside.com 2019 - 2024. All rights reserved.