Python AWS Lambda 事件 JSON

我正在尝试解析 AWS Lambda 的事件数据,我已将其连接到 SQS,并使用 SQS 发送 JSON 格式。


这是我的 AWS Lambda 函数


import json


def lambda_handler(event, context):

    # print(event)

    # print(event['Records'][0])

    x = event['Records'][0]['body']

    print(x)

    print(type(x))

以下是事件数据


{

   "Records":[

      {

         "messageId":"916f5e95-b2f6-4148-9c62-2ac8e764f06c",

         "receiptHandle":"AQEBmLuoGWtLtFFgvyCFdSPMJh2HKgHOIPWNUq22EOwCzGT8iILZm97CE6j4J6oR71ZpDr3sgxQcJyVZ+dmmvGl+fFftT9GCJqZYrjMGsR2Q6WsMd8ciI8bTtDXyvsk8ektd7UGfh4gxIZoFp7WUKVRcMEeBkubKd8T4/Io81D0l/AK7MxcEfCj40vWEsex1kkGmMRlBtdSeGyy7fJgUq5CFAYWciiWtbSit8S0Y38xZPmsIFhoxP0egQRoJcW4aUgMi469Gj5+khizetybtgC8vux5NCg/IejxcCueXkQ7LKVF8kfRdqRSUYB6DsOrGgfmZpK4wpXIarByNz0R2p7J88meYpj2IVULv/emXsSYaKG4rXnpbH4J9ijbLWckYLAd7wPDzCYri1ZSTgAz0kchsEw==",

         "body":"{\n\"name\": \"aniket\",\n\"tag\": \"hello\"\n}",

         "attributes":{

            "ApproximateReceiveCount":"1",

            "SentTimestamp":"1602046897707",

            "SenderId":"AIDAR3BXDV4FCWXL56NUU",

            "ApproximateFirstReceiveTimestamp":"1602046897712"

         },

         "messageAttributes":{

            

         },

         "md5OfBody":"98da683a47692b39c1d43bd4fa21ed89",

         "eventSource":"aws:sqs",

         "eventSourceARN":"arn:aws:sqs:ap-south-1:126817120010:documentation",

         "awsRegion":"ap-south-1"

      }

   ]

}

    

我正在尝试访问数据正文。


这就是我得到的


"{\n\"name\": \"aniket\",\n\"tag\": \"hello\"\n}"

它的类型是字符串。


我需要做什么才能将其转换为正确的 JSON 格式?


我还尝试了以下方法:


import json


def lambda_handler(event, context):

    data = json.dumps(event['Records'][0]['body'])

    print(data)

这是输出


"{\n\"name\": \"aniket\",\n\"tag\": \"hello\"\n}"

但这次的类型是 JSON。


预期的格式是


{

"name": "aniket",

"tag": "hello"

}


汪汪一只猫
浏览 46回答 2
2回答

米脂

你必须使用json.loadsnot json.dumps。尝试这个:import jsonevent = {   "Records":[      {         "messageId":"916f5e95-b2f6-4148-9c62-2ac8e764f06c",         "receiptHandle":"AQEBmLuoGWtLtFFgvyCFdSPMJh2HKgHOIPWNUq22EOwCzGT8iILZm97CE6j4J6oR71ZpDr3sgxQcJyVZ+dmmvGl+fFftT9GCJqZYrjMGsR2Q6WsMd8ciI8bTtDXyvsk8ektd7UGfh4gxIZoFp7WUKVRcMEeBkubKd8T4/Io81D0l/AK7MxcEfCj40vWEsex1kkGmMRlBtdSeGyy7fJgUq5CFAYWciiWtbSit8S0Y38xZPmsIFhoxP0egQRoJcW4aUgMi469Gj5+khizetybtgC8vux5NCg/IejxcCueXkQ7LKVF8kfRdqRSUYB6DsOrGgfmZpK4wpXIarByNz0R2p7J88meYpj2IVULv/emXsSYaKG4rXnpbH4J9ijbLWckYLAd7wPDzCYri1ZSTgAz0kchsEw==",         "body":"{\n\"name\": \"aniket\",\n\"tag\": \"hello\"\n}",         "attributes":{            "ApproximateReceiveCount":"1",            "SentTimestamp":"1602046897707",            "SenderId":"AIDAR3BXDV4FCWXL56NUU",            "ApproximateFirstReceiveTimestamp":"1602046897712"         },         "messageAttributes":{         },         "md5OfBody":"98da683a47692b39c1d43bd4fa21ed89",         "eventSource":"aws:sqs",         "eventSourceARN":"arn:aws:sqs:ap-south-1:126817120010:documentation",         "awsRegion":"ap-south-1"      }   ]}parsed = json.loads(event['Records'][0]['body'])print(json.dumps(parsed, indent=4, sort_keys=True))输出:{    "name": "aniket",    "tag": "hello"}

慕的地10843

尝试使用 json.loads(string) 反序列化 json。另外,我认为您不需要指定索引 [0],因为“body”是一个对象而不是数组。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python