为了账号安全,请及时绑定邮箱和手机立即绑定

Python AWS Lambda 事件 JSON

Python AWS Lambda 事件 JSON

汪汪一只猫 2023-10-11 21:36:34
我正在尝试解析 AWS Lambda 的事件数据,我已将其连接到 SQS,并使用 SQS 发送 JSON 格式。这是我的 AWS Lambda 函数import jsondef 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 jsondef 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"}
查看完整描述

2 回答

?
米脂

TA贡献1836条经验 获得超3个赞

你必须使用json.loadsnot json.dumps。


尝试这个:


import json


event = {

   "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"

}


查看完整回答
反对 回复 2023-10-11
?
慕的地10843

TA贡献1785条经验 获得超8个赞

尝试使用 json.loads(string) 反序列化 json。

另外,我认为您不需要指定索引 [0],因为“body”是一个对象而不是数组。


查看完整回答
反对 回复 2023-10-11
  • 2 回答
  • 0 关注
  • 45 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信