首页 > 解决方案 > 与 Google Calendar API 中的所有与会者一起在 typescript 中形成一个字符串

问题描述

我正在尝试使用 HTTP 方法使用 Google Calendar API 创建一个事件。我正在用打字稿编写所有代码。现在,我有一个数组,其中包含我们要添加到该活动的所有与会者的电子邮件 ID。因此,为了在单个查询参数中传递所有参与者的电子邮件 ID,我试图以 API 文档中所示的确切格式形成单个字符串。但是在形成字符串之后,当我从服务器端代码发出 API 请求时,它会以某种方式在该字符串中传递不需要的反斜杠。

我尝试通过连接关键字电子邮件来形成一个字符串,该关键字电子邮件将在我想作为与会者包含的每封电子邮件之前发送。我尝试使用单反斜杠 () 作为转义序列来插入双反逗号,但它没有用。

我也尝试过使用join()函数做同样的事情,但是当我在 Create Event API 调用中将它作为参加者参数值传递时,仍然会在字符串中引入不需要的反斜杠。

我需要在 API 调用中传递的字符串的预期格式是:

"attendees": [
    {
      "email": "xyz@gmail.com"
    },
{
       "email" : "abc@gmail.com"
}
]

我试图形成字符串的函数是 -

for (let index = 0; index < email_ids.length-1; index++) {
                    mapping = mapping + "{'email':"+"'"+email_ids[index]+"'}";
                    if((email_ids.length-1)!=index) {
                       mapping=mapping+ ",";
                    }
                }

这里的映射是我试图形成的字符串。现在的问题是,当我 console.log 这个映射字符串时,它会打印出类似 -

{'email': " xyz@gmail.com '} , {'email': " abc@gmail.com '}

这正是我想在参加者参数中传递的东西。但是当我阅读我发送的 API 请求的日志时,我看到参数参加者类似于 -

"attendees":["{\'email\': \\" xyz@gmail.com \'} , {\'email\': \\" abc@gmail.com \'} "]

在我的上述函数的每个连接点都引入了这些不需要的反斜杠,我想删除它们。我认为这就是我创建公共活动但没有将与会者添加到该活动的原因,因此添加与会者部分没有按预期工作。

任何帮助表示赞赏。提前非常感谢。

标签: javascripttypescriptgoogle-calendar-api

解决方案


您似乎正在生成一个字符串,并将其传递回发送数据的任何方法。就像 Dan D 在评论中所说的那样,尝试创建一个对象,因为这似乎是界面在该atendees[]领域所期望的。

这也大大简化了您的代码:

const list = email_ids.map((id: string) => ({ email: id }));

这将创建一个完整列表。在您的代码中,您跳过最后一项email_ids。我假设这是一个错误,但如果不是,你可以这样做:

const list = email_ids
   .filter((_:string, i:number)=> i < email_ids.length -1)
   .map((id: string) => ({ email: id }));

这将生成一个Array与对象,如

[
  { email: "xyz@gmail.com" },
  { email: "abc@gmail.com" }
]

另外,请注意您的代码似乎已经在某处将数据转换为数组:

"attendees":["..."]

因此,为了避免数组内部的数组,您需要弄清楚发生了什么以及如何传递/接收正确的数据。如果不查看该有效负载从生成到发送到服务器的整个生命周期,就很难说。

最后:一般来说,没有理由手动生成 JSON。事实上,我想不出任何人想要或需要直接创建 JSON 源代码的单一原因。如果您确实需要一个string而不是 ab 对象,那么创建一个对象(如上)并JSON.stringify()稍后调用它是正确的解决方案。


推荐阅读