【问题标题】:TypeError: string indices must be integers - Python JSONTypeError:字符串索引必须是整数 - Python JSON
【发布时间】:2020-08-10 20:51:07
【问题描述】:

在下面的my_object 实例化上获取TypeError: string indices must be integers(方法的第三行)

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': {}
        }
    }]
}

【问题讨论】:

    标签: python json parsing


    【解决方案1】:

    当你在sns_body["Message"] 上运行json.loads 时,你仍然会得到一个字符串。您可以运行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
    

    【讨论】:

    • 我不想更改代码,这是我在别人之后捡到的,我想写一个测试,所以对更改 JSON 有效负载更感兴趣。
    • 您在问题中没有提到这一点。在这种情况下,将字符串更改为 json.loads 输出的任何内容。
    • 我知道是的,现在只想到它,如果可行,我明天会在笔记本电脑上,我会接受答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 2016-03-26
    • 2016-02-17
    • 2023-03-03
    • 1970-01-01
    • 2022-11-02
    相关资源
    最近更新 更多