如何以编程方式将另一个项目插入 body?

How to insert another item programmatically into body?

我正在尝试通过 Python 3.8 向 Google 日历 API 构建一个 free/busy body 请求。但是,当我尝试向 body 请求中插入新项目时,我遇到了一个错误的请求并且无法使用它。

此代码有效:

SUBJECTA = '3131313636@resource.calendar.google.com'

SUBJECTB =  '34343334@resource.calendar.google.com'


    body = {
  "timeMin": now,
  "timeMax": nownext,
  "timeZone": 'America/New_York',
  "items": [{'id': SUBJECTA},{"id": SUBJECTB} ]
}

好Body结果:

{'timeMin': '2019-11-05T11:42:21.354803Z', 
'timeMax': '2019-11-05T12:42:21.354823Z', 
'timeZone': 'America/New_York', 
'items': [{'id': '131313636@resource.calendar.google.com'}, 
{'id': '343334@resource.calendar.google.com'}]}

但是, 使用此代码时:

items = "{'ID': '1313636@resource.calendar.google.com'},{'ID': '3383137@resource.calendar.google.com'},{'ID': '383733@resource.calendar.google.com'}"

  body = { 
  "timeMin": now,
  "timeMax": nownext,
  "timeZone": 'America/New_York',
  "items":  items 
}

Body 结果在开始和结束位置包含额外的引号,请求失败:

{'timeMin': '2019-11-05T12:04:41.189784Z', 
'timeMax': '2019-11-05T13:04:41.189804Z', 
'timeZone': 'America/New_York', 
'items': ["{'ID': 13131313636@resource.calendar.google.com},{'ID': 
53333383137@resource.calendar.google.com},{'ID': 
831383733@resource.calendar.google.com},{'ID': 
33339373237@resource.calendar.google.com},{'ID': 
393935323035@resource.calendar.google.com}"]} 

如何正确处理并准确发送物品清单?

  • 在您的情况下,items 的值由 "{'ID': '1313636@resource.calendar.google.com'},{'ID': '3383137@resource.calendar.google.com'},{'ID': '383733@resource.calendar.google.com'}" 的字符串给出。
  • 您想通过使用 python 解析字符串值来用作对象。
    • 您期望的结果值为[{'ID': '1313636@resource.calendar.google.com'}, {'ID': '3383137@resource.calendar.google.com'}, {'ID': '383733@resource.calendar.google.com'}]
  • 您已经可以使用 Calender API。

如果我的理解是正确的,这个答案怎么样?请将此视为几个答案之一。

示例脚本:

import json  # Added

items = "{'ID': '1313636@resource.calendar.google.com'},{'ID': '3383137@resource.calendar.google.com'},{'ID': '383733@resource.calendar.google.com'}"

items = json.loads(("[" + items + "]").replace("\'", "\""))  # Added

body = { 
  "timeMin": now,
  "timeMax": nownext,
  "timeZone": 'America/New_York',
  "items": items
}

print(body)

结果:

如果nownownext分别是"now""nownext"的值,则结果如下

{
  "timeMin": "now",
  "timeMax": "nownext",
  "timeZone": "America/New_York",
  "items": [
    {
      "ID": "1313636@resource.calendar.google.com"
    },
    {
      "ID": "3383137@resource.calendar.google.com"
    },
    {
      "ID": "383733@resource.calendar.google.com"
    }
  ]
}

注:

  • 如果您可以检索 ID 作为字符串值,我推荐以下方法作为示例脚本。

    ids = ['1313636@resource.calendar.google.com', '3383137@resource.calendar.google.com', '383733@resource.calendar.google.com']
    items = [{'ID': id} for id in ids]
    

如果我误解了您的问题而这不是您想要的结果,我深表歉意。