Json 列表索引必须是整数或切片,而不是str python3.6

Json 列表索引必须是整数或切片,而不是str python3.6,json,amazon-web-services,amazon-ec2,python-3.6,boto3,Json,Amazon Web Services,Amazon Ec2,Python 3.6,Boto3,我有一个python脚本,它提取我拥有的所有AWS帐户中的所有EC2实例ID和标记。我试图只解析一个键的一个值。具体地说,我只想从响应中解析关键电子邮件的值,但我得到了一个错误:列表索引必须是整数或切片,而不是str。下面是我的代码和json响应 代码: 示例JSON: 错误: 您的问题在于线路: host_tags = instance.tags print(host_tags['Key']['email']['Value']) 改写如下: host_tags = instance.tags

我有一个python脚本,它提取我拥有的所有AWS帐户中的所有EC2实例ID和标记。我试图只解析一个键的一个值。具体地说,我只想从响应中解析关键电子邮件的值,但我得到了一个错误:列表索引必须是整数或切片,而不是str。下面是我的代码和json响应

代码:

示例JSON:

错误:


您的问题在于线路:

host_tags = instance.tags
print(host_tags['Key']['email']['Value'])
改写如下:

host_tags = instance.tags
for tag in host_tags:
    print('Key: ' + tag['Key'] + ' Value: ' + tag['Value'])

instance.tags是dict的数组。您需要处理数组中的每个项目标记。然后您需要处理dict提取其键/值对。

尝试:email=[tag['value']用于主机标签中的标签,如果tag['key']=='email'][0],因为它抱怨主机标签[][][],所以打印主机标签以查看其格式。如我所怀疑的,如果它是[{'Key':'gitlab','Value':'true'},…,那么host_标记['Key']就没有意义了。因为您的json结构看起来像[{},…]。这表明数据是以列表开始的,即[]所以它期望数字索引,那么里面只有一个值是字典,这里使用的是字典键索引。逻辑是有道理的。我能够让它工作。
list indices must be integers or slices, not str
host_tags = instance.tags
print(host_tags['Key']['email']['Value'])
host_tags = instance.tags
for tag in host_tags:
    print('Key: ' + tag['Key'] + ' Value: ' + tag['Value'])