Как правильно получить доступ к свойствам в JSON из Python? - PullRequest
0 голосов
/ 10 июля 2020

EDIT: как указывали некоторые пользователи, запрос фактически возвращает не JSON, а строку, закодированную JSON. Проблема здесь не в парсинге JSON в python, а в написании его таким образом, чтобы запрос можно было отправить в API. Следовательно, нет необходимости использовать библиотеку json python.

Я использую различные API Google (слайды, диск, листы и т. Д.) С программой python. У меня возникают проблемы с доступом к свойствам в JSON, возвращаемых запросами API.

Возьмите, например, запрос слайдов Presentations (). Get . Он возвращает экземпляр презентации . И я хочу получить доступ к его свойству Slides, которое представляет собой массив объектов страницы .

Итак, я пробую код

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

Но я получаю сообщение об ошибке говоря: «TypeError: строковые индексы должны быть целыми числами»

Однако я подумал, что использование скобок со строкой было приемлемой заменой доступа через точку. Фактически, я не знаю, как преобразовать это в точечные акцепторы, потому что это вызывает синтаксическую ошибку, поскольку ключи должны быть заключены в кавычки.

'slides'[0].'pageType' 

вызывает синтаксическую ошибку из-за точки и без точка тоже не работает

Ответы [ 3 ]

1 голос
/ 10 июля 2020

Итак, с представлением 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')
0 голосов
/ 10 июля 2020

Похоже, что запрос возвращает строку в кодировке json. В этом случае вам необходимо загрузить это в словарь, используя стандартную json библиотеку python.

import json

slideInfo = SLIDES.presentations().get(presentationId=presId).execute()
slideInfo = json.loads(slideInfo)
slideInfo = slideInfo.get('slides')[0]['pageType']
0 голосов
/ 10 июля 2020

Я думаю, ты действительно получаешь строку обратно. Между прочим, объекты 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']
...