如何从Cognito API响应中获取phone_no

时间:2019-01-04 09:54:21

标签: python

调用认知模式admingetuser

response = client.admin_get_user( UserPoolId='string', Username='string' )

作为回应,我回到response

response {'Username': 'xyz@gmail.com', 'UserAttributes': [{'Name': 'sub', 'Value': 'cb0328a8-38fd-4799-84ef-4f7f2733016e'}, {'Name': 'email_verified', 'Value': 'true'}, {'Name': 'phone_number_verified', 'Value': 'false'}, {'Name': 'phone_number', 'Value': '+445115115551'}, {'Name': 'custom:account_id', 'Value': 'a54a936f-d846-44ec-8f6f-c9e127991bda'}, {'Name': 'email', 'Value': 'xyz@gmail.com'}], 'UserCreateDate': datetime.datetime(2018, 12, 10, 13, 46, 47, 533000, tzinfo=tzlocal()), 'UserLastModifiedDate': datetime.datetime(2018, 12, 14, 16, 24, 20, 707000, tzinfo=tzlocal()), 'Enabled': True, 'UserStatus': 'CONFIRMED', 'ResponseMetadata': {'RequestId': '5c649fd3-1005-11e9-b484-433d044b60ba', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Fri, 04 Jan 2019 09:44:42 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '500', 'connection': 'keep-alive', 'x-amzn-requestid': '5c649fd3-1005-11e9-b484-433d044b60ba'}, 'RetryAttempts': 0}}"

我想从python的此响应中提取出phone_no,我该怎么做? 有什么建议吗?

2 个答案:

答案 0 :(得分:0)

根据cognito documentation的响应采用JSON格式。

因此您可以简单地使用json.loads(response)将响应解析为json。这样,您可能会得到字典列表。此列表元素之一将是字典包含phone_number。该词典中Value键下的值是电话号码。

答案 1 :(得分:0)

假设您已经将json作为dict加载(一种或另一种方式):

def get_phone(response):
    for user_attribute in response.get('UserAttributes', []):
        if user_attribute['Name'] == 'phone_number':
            yield user_attribute['Value']

response = {'Username': 'xyz@gmail.com', 
'UserAttributes': [{'Name': 'sub', 'Value': 'cb0328a8-38fd-4799-84ef-4f7f2733016e'}, {'Name': 'email_verified', 'Value': 'true'}, 
{'Name': 'phone_number_verified', 'Value': 'false'}, {'Name': 'phone_number', 'Value': '+440123456789'}, 
{'Name': 'custom:account_id', 'Value': 'a54a936f-d846-44ec-8f6f-c9e127991bda'}, 
{'Name': 'email', 'Value': 'xyz@gmail.com'}]...}

print(list(get_phone(response)))

get_phone是生成器功能,因此它将处理可能的多个电话号码(如果存在?),您可以一次遍历结果一个号码,而不必转换为列表。