如何解析AWS SES SDK getIdentityVerificationAttributes在JS中返回的对象?
调用AWS SES getIdentityVerificationAttributes接口的解析问题
我调用AWS SES的getIdentityVerificationAttributes接口时,在解析返回对象时遇到了一堆问题:
- 官方说明返回的是map,但使用
.get()方法时报错“.get()不是函数” - 尝试用
Object.entries处理仍无法获取VerificationStatus - 执行
JSON.Parse(identityVerify)时报错“ERROR SyntaxError: Unexpected token o in JSON at position 1”
我的JavaScript代码如下:
const isEmailAWSVerified = async (Email) => { try { console.log('[isEmailAWSVerified] Email: ', Email); /* data = { VerificationAttributes: { "myEmail@example.com": { VerificationStatus: "Success", // Could be "Pending", "Failed"... VerificationToken: "EXAMPLE3VYb9EDI2nTOQRi/Tf6MI/6bD6THIGiP1MVY=" } } } */ let identityVerify= await SES.getIdentityVerificationAttributes( {Identities: [`${Email}`]}) .promise(); console.log('[isEmailAWSVerified] - identityVerify', identityVerify); const parsedResponse = JSON.Parse(identityVerify); const ret = Object.entries(identityVerify.VerificationAttributes).map(([key, val]) => { let status = ''; if (key === Email) { const tmp = JSON.Parse(val); console.log('[isEmailAWSVerified -- Inside Map] tmp: ', tmp); // status = Object.entries(val).map(([key, val]) => { // return val; // }); return status; } return ''; }) console.log('[isEmailAWSVerified] - ret', ret); return ret === 'Success' ? 1 : 0; } catch ( err) { console.log('[isEmailAWSVerified] - ERROR', err); return 0; } }
我找到了一段Python示例代码,想把它转换成JavaScript代码,示例代码如下:
try: response = self.ses_client.get_identity_verification_attributes( Identities=[identity]) status = response['VerificationAttributes'].get( identity, {'VerificationStatus': 'NotFound'})['VerificationStatus'] logger.info("Got status of %s for %s.", status, identity) except ClientError: logger.exception("Couldn't get status for %s.", identity) raise else: return status
问题分析
- JSON.Parse报错:
identityVerify本身就是JavaScript对象,不是JSON字符串,无需调用JSON.parse()(注意JS里是小写开头的parse,你代码里写的JSON.Parse是语法错误)。 - .get()报错:AWS返回的是普通JS对象,不是Map类型,普通对象没有
.get()方法,直接用属性访问即可。 - 冗余遍历:你只查询了单个邮箱,不需要用
Object.entries遍历所有属性,直接通过邮箱键访问目标数据即可。
转换后的JavaScript代码
const isEmailAWSVerified = async (Email) => { try { console.log('[isEmailAWSVerified] Email: ', Email); const identityVerify = await SES.getIdentityVerificationAttributes({ Identities: [Email] }).promise(); // 直接获取目标邮箱的验证属性,设置兜底值避免找不到时报错 const verificationAttr = identityVerify.VerificationAttributes[Email] || { VerificationStatus: 'NotFound' }; const status = verificationAttr.VerificationStatus; console.log(`[isEmailAWSVerified] - 邮箱${Email}的验证状态: ${status}`); return status === 'Success' ? 1 : 0; } catch (err) { console.log('[isEmailAWSVerified] - ERROR', err); return 0; } }
代码说明
- 移除了多余的
JSON.parse调用,直接操作返回的JS对象 - 用对象属性访问
identityVerify.VerificationAttributes[Email]获取目标数据,通过||设置兜底值,处理邮箱未被记录的情况 - 直接提取
VerificationStatus,逻辑简洁,无需遍历所有属性 - 修正了原代码中
JSON.Parse的大小写错误
内容的提问来源于stack exchange,提问作者user350213
相关产品推荐
相关产品推荐

