如何解决TypeError:字符串索引必须为整数-Python JSON
在下面的TypeError: string indices must be integers
实例中获取my_object
(方法的第三行)
def get_note_retrieval_body(event):
sns_body = event["Records"][0]["Sns"]
message = json.loads(sns_body["Message"])
my_object = message["data"]["getNotes"]
return my_object
当我使用str(event)然后对它进行json格式化时,我得到以下内容(帐号等用XXX标记),所以这将告诉您事件的样子
{
'Records': [{
'EventSource': 'aws:sns','EventVersion': '1.0','EventSubscriptionArn': 'arn:aws:sns:us-east-1:XXXXXX:topic-name-sandbox:7XXXX','Sns': {
'Type': 'Notification','MessageId': 'd1074c88-ae21-52b6-8a75-1b07d766cfdd','TopicArn': 'arn:aws:sns:us-east-1:XXXXXXX:topic-name','Subject': None,'Message': '"{\\"data\\": {\\"getNotes\\": {\\"claimNumber\\": \\"AAAB09000010\\",\\"dateEntered\\": \\"2010-04-22T08:03:53\\",\\"categoryCode\\": \\"fdf49\\",\\"subCategoryCode\\": \\"ATT\\",\\"fileNoteTextDetails\\": [{\\"fileNoteText\\": {\\"fileNoteID\\": \\"112B40FE42934055\\",\\"noteText\\": \\"Send Acknowledgement Letter to Claimant\\",\\"authorID\\": \\"0\\"},\\"fileNoteAttachments\\": [{\\"attachment\\": {\\"fileName\\": \\"F70F880879D35FC4.doc\\",\\"fileExtension\\": \\".URL\\",\\"dateCreated\\": \\"2010-04-22T08:59:57\\",\\"createdBy\\": \\"CLONER\\",\\"dateUpdated\\": \\"2020-07-30T08:36:19.1903051\\",\\"updatedBy\\": \\"EVERYONE\\"}}]}],\\"fileNoteExtendedEntityData\\": {\\"dateOnDocument\\": \\"2010-04-22T08:59:57\\",\\"serviceDateFrom\\": \\"2010-04-22T08:59:57\\",\\"serviceDateThrough\\": \\"2010-04-22T08:59:57\\",\\"author\\": \\"n0000000\\"}}}}"','Timestamp': '2020-07-20T10:50:47.850Z','SignatureVersion': '1','Signature': 'XXXXXX','SigningCertUrl': 'https://sns.us-east-1.amazonaws.com/XXXcert.pem','UnsubscribeUrl': 'https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:XXXXXX:topic-name-sandbox:7XX'.
'MessageAttributes': {}
}
}]
}
解决方法
在json.loads
上运行sns_body["Message"]
时,仍然会返回一个字符串。您可以运行json.loads
两次,这应该可以解决问题。
sns_body["Message"]
被引用两次(即,用单引号和双引号引起来)。因此,当您尝试对其进行一次解码时,您仍然会返回一个字符串,但是这次仅被引用一次。然后第二个json.loads
会将字符串解码为字典。
def get_note_retrieval_body(event):
sns_body = event["Records"][0]["Sns"]
message = json.loads(json.loads(sns_body["Message"]))
my_object = message["data"]["getNotes"]
return my_object
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。