如何从 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']
编辑:正如一些用户所指出的,请求实际上并不是 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']