【问题标题】:How to correctly access properties in a JSON from Python?如何从 Python 正确访问 JSON 中的属性?
【发布时间】:2020-07-10 18:58:18
【问题描述】:

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

我在 python 程序中使用了各种谷歌 API(幻灯片、驱动器、工作表等)。 我在访问 API 请求返回的 JSON 中的属性时遇到问题。

以幻灯片presentations().get 请求为例。 它返回一个instance of presentation。 我想访问它的 Slides 属性,它是一个page objects 的数组。

所以我正在尝试代码

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

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

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

'slides'[0].'pageType' 

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

【问题讨论】:

    标签: python json google-slides-api


    【解决方案1】:

    因此使用文档中的 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')
    

    【讨论】:

      【解决方案2】:

      我认为你实际上得到了一个字符串。顺便说一下,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']
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-01
          • 2022-11-17
          • 2012-08-11
          • 2021-10-20
          • 2019-07-27
          相关资源
          最近更新 更多