AWS Boto3遍历JSON响应

时间:2019-08-16 13:46:58

标签: python amazon-web-services boto3

我正在编写一个Python脚本,以使用Boto3从ELBv2端点获取LoadBalancerName值。

因为返回了?dict?有多个级别,我不知道这些项目的索引,因此无法指定。我当前的代码如下:-

import boto3
import pprint
import json

pp = pprint.PrettyPrinter(indent=4)
elbv2 = boto3.client('elbv2', region_name='eu-west-2')
response = elbv2.describe_load_balancers()
pp.pprint(response['LoadBalancers'][0]['LoadBalancerName'])

for k in response:
    print("Key: ", k)
    print( "Value: ", dict[k])

我知道该值当前正在打印密钥,因为我不确定如何嵌套获取密钥。理想情况下,我希望能够打印子键LoadBalancerName

的值

此外,我正在此上使用Python 2.7,因为这是将在运行此命令的服务器上安装的内容。

1 个答案:

答案 0 :(得分:1)

有一个describe_load_balancers()响应正文的示例,请参见THIS

响应语法

{
    'LoadBalancerDescriptions': [
        {
            'LoadBalancerName': 'string',
            'DNSName': 'string',
            'CanonicalHostedZoneName': 'string',
            'CanonicalHostedZoneNameID': 'string',
            'ListenerDescriptions': [
                {
                    'Listener': {
                        'Protocol': 'string',
                        'LoadBalancerPort': 123,
                        'InstanceProtocol': 'string',
                        'InstancePort': 123,
                        'SSLCertificateId': 'string'
                    },
                    'PolicyNames': [
                        'string',
                    ]
                },
            ],
            'Policies': {
                'AppCookieStickinessPolicies': [
                    {
                        'PolicyName': 'string',
                        'CookieName': 'string'
                    },
                ],
                'LBCookieStickinessPolicies': [
                    {
                        'PolicyName': 'string',
                        'CookieExpirationPeriod': 123
                    },
                ],
                'OtherPolicies': [
                    'string',
                ]
            },
            'BackendServerDescriptions': [
                {
                    'InstancePort': 123,
                    'PolicyNames': [
                        'string',
                    ]
                },
            ],
            'AvailabilityZones': [
                'string',
            ],
            'Subnets': [
                'string',
            ],
            'VPCId': 'string',
            'Instances': [
                {
                    'InstanceId': 'string'
                },
            ],
            'HealthCheck': {
                'Target': 'string',
                'Interval': 123,
                'Timeout': 123,
                'UnhealthyThreshold': 123,
                'HealthyThreshold': 123
            },
            'SourceSecurityGroup': {
                'OwnerAlias': 'string',
                'GroupName': 'string'
            },
            'SecurityGroups': [
                'string',
            ],
            'CreatedTime': datetime(2015, 1, 1),
            'Scheme': 'string'
        },
    ],
    'NextMarker': 'string'
}

如果要获取所有负载均衡器的名称,则

response = client.describe_load_balancers()
for item in response['LoadBalancerDescriptions']:
    print(item['LoadBalancerName'])

会给你名字。