SQS触发的Lambda无法解码消息体,如何正确解析?
解决SQS触发Lambda时消息体的转义/解码问题
当SQS触发Lambda时,日志里的消息体出现大量转义字符,本质是消息体被双重序列化了——发送时把JSON对象转成了字符串,Lambda接收到的body就是这个带转义的字符串,需要再解码一次才能拿到原始数据。
Python 解决方案
- 从Lambda事件中提取并解码消息体:
import json def lambda_handler(event, context): # 获取第一条SQS记录的原始消息体 raw_body = event['Records'][0]['body'] # 解码带转义的JSON字符串 parsed_body = json.loads(raw_body) # 正常访问业务数据 print(parsed_body.get('target_key')) return { 'statusCode': 200, 'body': json.dumps('处理完成') }
Node.js 解决方案
- 提取并解码消息体:
exports.handler = async (event) => { // 获取第一条SQS记录的原始消息体 const rawBody = event.Records[0].body; // 解码带转义的JSON字符串 const parsedBody = JSON.parse(rawBody); // 正常访问业务数据 console.log(parsedBody.targetKey); return { statusCode: 200, body: JSON.stringify('处理完成') }; };
关键注意事项
- 避免双重序列化:发送SQS消息时,仅需将JSON对象序列化一次(Python用
json.dumps(),Node.js用JSON.stringify()),不要对已序列化的字符串再次执行序列化操作。 - 若消息体是普通文本而非JSON,直接使用
raw_body即可;若仍有转义,检查发送端是否额外做了编码处理(比如Base64)。
内容的提问来源于stack exchange,提问作者Arif Bilgin
相关产品推荐
相关产品推荐

