打印 Python 中所有匹配的 JSON 词典
Print all matching JSON dictionaries in Python
我目前正在使用 AWS Boto3 尝试获取我当前所有 运行 EC2 实例的列表。我现在可以使用 describe_instances 列出我的所有实例,但我想弄清楚如何提取所有实例 ID,以便打印它们并将它们用于另一部分的脚本。最终,我有一个启动所有实例的脚本,接下来我想要一个将它们全部拆除的脚本。
JSON 树在下面。
为了select一个特定的,我必须这样做,
instance_id = response['Reservations'][0]['Instances'][0]['InstanceId']
但我希望能够 select 所有实例,无论我有多少实例,所以尝试 [0][1] 等是不可行的,所以我不确定我会怎么做继续说我想要命令中的每个 InstanceId。
{
u'Reservations': [
{
u'Groups': [
],
u'Instances': [
{
u'AmiLaunchIndex': 0,
u'Architecture': 'i386',
u'EbsOptimized': False,
u'Hypervisor': 'xen',
u'InstanceId': 'i-6fb4ad61',
}
],
u'OwnerId': '',
u'ReservationId': ''
},
{
u'Groups': [
],
u'Instances': [
{
u'AmiLaunchIndex': 0,
u'Architecture': 'i386',
u'EbsOptimized': False,
u'Hypervisor': 'xen',
u'InstanceId': 'i-afe3faa1',
}
],
u'OwnerId': '',
u'ReservationId': ''
}
],
'ResponseMetadata': {
'HTTPHeaders': {
'content-type': 'text/xml;charset=UTF-8',
'date': 'Thu, 25Aug201623: 44: 09GMT',
'server': 'AmazonEC2',
'transfer-encoding': 'chunked',
'vary': 'Accept-Encoding'
},
'HTTPStatusCode': 200,
'RequestId': ''
}
}
这是我用来获取实例 ID 的命令。
launch_instance = ec2.create_instances(ImageId="xxxxxx", MinCount=1, MaxCount=1,SecurityGroupIds=["sg-xxxxxxx"],InstanceType='m3.medium', SubnetId='subnet-xxxxx')
response = ec2client.describe_instances(
InstanceIds=[
launch_instance[0].id],
)
instance_id = response['Reservations'][0]['Instances'][0]['InstanceId']
print instance_id
输出为 i-6fb4ad61
您可以通过以下方式实现:
>>> instance_ids = [instance['InstanceId'] for reservations in response['Reservations'] for instance in reservations['Instances']]
>>> instance_ids
['i-6fb4ad61', 'i-afe3faa1']
您的 JSON
结构保存为 response
试试这个
instance_ids = []
for reservations in response['Reservations']:
for instance in reservations['Instances']:
instance_ids.append(instance['InstanceId'])
我目前正在使用 AWS Boto3 尝试获取我当前所有 运行 EC2 实例的列表。我现在可以使用 describe_instances 列出我的所有实例,但我想弄清楚如何提取所有实例 ID,以便打印它们并将它们用于另一部分的脚本。最终,我有一个启动所有实例的脚本,接下来我想要一个将它们全部拆除的脚本。
JSON 树在下面。
为了select一个特定的,我必须这样做,
instance_id = response['Reservations'][0]['Instances'][0]['InstanceId']
但我希望能够 select 所有实例,无论我有多少实例,所以尝试 [0][1] 等是不可行的,所以我不确定我会怎么做继续说我想要命令中的每个 InstanceId。
{
u'Reservations': [
{
u'Groups': [
],
u'Instances': [
{
u'AmiLaunchIndex': 0,
u'Architecture': 'i386',
u'EbsOptimized': False,
u'Hypervisor': 'xen',
u'InstanceId': 'i-6fb4ad61',
}
],
u'OwnerId': '',
u'ReservationId': ''
},
{
u'Groups': [
],
u'Instances': [
{
u'AmiLaunchIndex': 0,
u'Architecture': 'i386',
u'EbsOptimized': False,
u'Hypervisor': 'xen',
u'InstanceId': 'i-afe3faa1',
}
],
u'OwnerId': '',
u'ReservationId': ''
}
],
'ResponseMetadata': {
'HTTPHeaders': {
'content-type': 'text/xml;charset=UTF-8',
'date': 'Thu, 25Aug201623: 44: 09GMT',
'server': 'AmazonEC2',
'transfer-encoding': 'chunked',
'vary': 'Accept-Encoding'
},
'HTTPStatusCode': 200,
'RequestId': ''
}
}
这是我用来获取实例 ID 的命令。
launch_instance = ec2.create_instances(ImageId="xxxxxx", MinCount=1, MaxCount=1,SecurityGroupIds=["sg-xxxxxxx"],InstanceType='m3.medium', SubnetId='subnet-xxxxx')
response = ec2client.describe_instances(
InstanceIds=[
launch_instance[0].id],
)
instance_id = response['Reservations'][0]['Instances'][0]['InstanceId']
print instance_id
输出为 i-6fb4ad61
您可以通过以下方式实现:
>>> instance_ids = [instance['InstanceId'] for reservations in response['Reservations'] for instance in reservations['Instances']]
>>> instance_ids
['i-6fb4ad61', 'i-afe3faa1']
您的 JSON
结构保存为 response
试试这个
instance_ids = []
for reservations in response['Reservations']:
for instance in reservations['Instances']:
instance_ids.append(instance['InstanceId'])