如何从 Python 正确访问 JSON 中的属性?

How to correctly access properties in a JSON from Python?

编辑:正如一些用户所指出的,请求实际上并不是 return 一个 JSON,而是一个编码为 JSON 的字符串。 这里的问题实际上不是解析 python 中的 JSON,而是将其编写为可以向 API 发送请求的方式。因此,没有必要使用 json python 库。

我在 python 程序中使用各种 google APIs(幻灯片、驱动器、表格等)。 我在访问 API 请求 return 的 JSON 中的属性时遇到问题。

以幻灯片presentations().get请求为例。 它 return 是 instance of presentation。 我想访问它的幻灯片 属性,它是 page objects.

的数组

所以我正在尝试代码

slideInfo = SLIDES.presentations().get(presentationId=presId).execute()
slideInfo = slideInfo.get(['slides'][0]['pageType'])

但我收到一条错误消息,提示“TypeError:字符串索引必须是整数”

但是,我认为使用带有字符串的方括号是可以接受的替代点访问的方法。事实上,我不知道如何将其转换为点访问器,因为它会引发语法错误,因为键必须用引号引起来。

'slides'[0].'pageType' 

由于点而引发语法错误,没有点也不起作用

我想你实际上是在找回字符串。 JSON 顺便说一句,对象的行为与字典完全一样。您应该首先使用 json 包来解析您的结果。如果您 实际上得到了正确的 JSON 结果,您应该像访问字典一样访问它

import json

slideInfo = SLIDES.presentations().get(presentationId=presId).execute()

# parse the JSON object into a dict
slideInfo = json.parse(slideInfo)
# access the JSON object like a dict
slideInfo = slideInfo['slides'][0]['pageType']

所以文档中的 JSON 表示:

{
  "presentationId": string,
  "pageSize": {
    object (Size)
  },
  "slides": [
    {
      object (Page)
    }
  ],
  "title": string,
  "masters": [
    {
      object (Page)
    }
  ],
  "layouts": [
    {
      object (Page)
    }
  ],
  "locale": string,
  "revisionId": string,
  "notesMaster": {
    object (Page)
  }
}

您可以使用以下方式访问幻灯片:slideInfo.get('slides')slideInfo['slides']

因此,如果您想获取第一张幻灯片的 pageType,则为:

slideInfo['slides'][0]['pageType']

slideInfo.get('slides')[0].get('pageType')

看起来请求正在返回一个 json 编码的字符串。在这种情况下,您必须使用 python 的标准 json 库将其加载到字典中。

import json

slideInfo = SLIDES.presentations().get(presentationId=presId).execute()
slideInfo = json.loads(slideInfo)
slideInfo = slideInfo.get('slides')[0]['pageType']