【问题标题】:How to extract elements from a JSON object如何从 JSON 对象中提取元素
【发布时间】:2020-03-26 12:44:40
【问题描述】:

我正在尝试从下面的 json 对象 (response) 中获取 DBInstanceIdentifier

{
    'Marker': 'string',
    'DBInstances': [
        {
            'DBInstanceIdentifier': 'string',
            'DBInstanceClass': 'string',
            'Engine': 'string',
            'DBInstanceStatus': 'string',
            'MasterUsername': 'string',
            'DBName': 'string',
            'Endpoint': {
                'Address': 'string',
                'Port': 123,
                'HostedZoneId': 'string'
            },
            'AllocatedStorage': 123,
            'InstanceCreateTime': datetime(2015, 1, 1),
            'PreferredBackupWindow': 'string',
            'BackupRetentionPeriod': 123,
            'DBSecurityGroups': [
                {
                    'DBSecurityGroupName': 'string',
                    'Status': 'string'
                },
            ],
            'VpcSecurityGroups': [
                {
                    'VpcSecurityGroupId': 'string',
                    'Status': 'string'
                },
            ],
            'DBParameterGroups': [
                {
                    'DBParameterGroupName': 'string',
                    'ParameterApplyStatus': 'string'
                },
            ],
            'AvailabilityZone': 'string',
            'DBSubnetGroup': {
                'DBSubnetGroupName': 'string',
                'DBSubnetGroupDescription': 'string',
                'VpcId': 'string',
                'SubnetGroupStatus': 'string',
                'Subnets': [
                    {
                        'SubnetIdentifier': 'string',
                        'SubnetAvailabilityZone': {
                            'Name': 'string'
                        },
                        'SubnetStatus': 'string'
                    },
                ],
                'DBSubnetGroupArn': 'string'
            },
            'PreferredMaintenanceWindow': 'string',
            'PendingModifiedValues': {
                'DBInstanceClass': 'string',
                'AllocatedStorage': 123,
                'MasterUserPassword': 'string',
                'Port': 123,
                'BackupRetentionPeriod': 123,
                'MultiAZ': True|False,
                'EngineVersion': 'string',
                'LicenseModel': 'string',
                'Iops': 123,
                'DBInstanceIdentifier': 'string',
                'StorageType': 'string',
                'CACertificateIdentifier': 'string',
                'DBSubnetGroupName': 'string',
                'PendingCloudwatchLogsExports': {
                    'LogTypesToEnable': [
                        'string',
                    ],
                    'LogTypesToDisable': [
                        'string',
                    ]
                },
                'ProcessorFeatures': [
                    {
                        'Name': 'string',
                        'Value': 'string'
                    },
                ]
            },
            'LatestRestorableTime': datetime(2015, 1, 1),
            'MultiAZ': True|False,
            'EngineVersion': 'string',
            'AutoMinorVersionUpgrade': True|False,
            'ReadReplicaSourceDBInstanceIdentifier': 'string',
            'ReadReplicaDBInstanceIdentifiers': [
                'string',
            ],
            'ReadReplicaDBClusterIdentifiers': [
                'string',
            ],
            'LicenseModel': 'string',
            'Iops': 123,
            'OptionGroupMemberships': [
                {
                    'OptionGroupName': 'string',
                    'Status': 'string'
                },
            ],
            'CharacterSetName': 'string',
            'SecondaryAvailabilityZone': 'string',
            'PubliclyAccessible': True|False,
            'StatusInfos': [
                {
                    'StatusType': 'string',
                    'Normal': True|False,
                    'Status': 'string',
                    'Message': 'string'
                },
            ],
            'StorageType': 'string',
            'TdeCredentialArn': 'string',
            'DbInstancePort': 123,
            'DBClusterIdentifier': 'string',
            'StorageEncrypted': True|False,
            'KmsKeyId': 'string',
            'DbiResourceId': 'string',
            'CACertificateIdentifier': 'string',
            'DomainMemberships': [
                {
                    'Domain': 'string',
                    'Status': 'string',
                    'FQDN': 'string',
                    'IAMRoleName': 'string'
                },
            ],
            'CopyTagsToSnapshot': True|False,
            'MonitoringInterval': 123,
            'EnhancedMonitoringResourceArn': 'string',
            'MonitoringRoleArn': 'string',
            'PromotionTier': 123,
            'DBInstanceArn': 'string',
            'Timezone': 'string',
            'IAMDatabaseAuthenticationEnabled': True|False,
            'PerformanceInsightsEnabled': True|False,
            'PerformanceInsightsKMSKeyId': 'string',
            'PerformanceInsightsRetentionPeriod': 123,
            'EnabledCloudwatchLogsExports': [
                'string',
            ],
            'ProcessorFeatures': [
                {
                    'Name': 'string',
                    'Value': 'string'
                },
            ],
            'DeletionProtection': True|False,
            'AssociatedRoles': [
                {
                    'RoleArn': 'string',
                    'FeatureName': 'string',
                    'Status': 'string'
                },
            ],
            'ListenerEndpoint': {
                'Address': 'string',
                'Port': 123,
                'HostedZoneId': 'string'
            },
            'MaxAllocatedStorage': 123
        },
    ]
}

这是我尝试过的:

response = rds_client.describe_db_instances()
InstanceIdentifierNames = response['DBInstances']['DBInstanceIdentifier']
print(InstanceIdentifierNames)

但我收到此错误:

TypeError: 列表索引必须是整数或切片,而不是 st

【问题讨论】:

  • 你有一个介于两者之间的列表。如果您需要多个对象,您应该使用[0] 来获取第一个元素或迭代它。
  • 没有“json 对象”这样的东西。 JSON 是一种文本格式,您在这里拥有的是一个 Python 字典,其中包含(除其他外)一个 Python 字典的 Python 列表。这些类型以及如何使用它们在文档中进行了描述。

标签: python arrays json


【解决方案1】:

DBInstances 是一个实例列表,因此您需要先获取给定的 DBInstance,然后才能获取其标识符。

我怀疑你想要类似下面的东西:

response = rds_client.describe_db_instances()
InstanceIdentifierNames = []
for DBInstance in response['DBInstances']:
  InstanceIdentifierNames.append(DBInstance['DBInstanceIdentifier'])
print(InstanceIdentifierNames)

【讨论】:

  • 是的,非常感谢。无论如何,我们可以打印一个漂亮的列表(一个在另一个之下)而不是另一个数组?
  • @JananathBanuka 您可能应该针对此类问题打开一个新问题,但for id in InstanceIdentifierNames: print(id) 会起作用。对于一个班轮,你可以做print(*InstanceIdentifierNames, sep='\n')
【解决方案2】:

因为DBInstances 是列表。所以试试:

 response['DBInstances'][0]['DBInstanceIdentifier']

【讨论】:

  • 如何遍历response 并打印所有DBInstanceIdentifier 值?以您的方式,它只打印 1 个值
  • @JananathBanuka 答案是here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
  • 2021-06-18
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多