You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决AWS Lambda解析含换行符请求体的JSON解码错误?

解决AWS Lambda读取带换行符JSON请求体的解码错误

问题原因

API Gateway的lambda_proxy集成会直接传递请求体的原始内容到Lambda的event['body']字段中。当请求JSON的字符串里包含未转义的原始换行符时,json.loads()会因为不符合JSON规范(JSON要求字符串内的换行必须是转义后的\\n)而触发解码错误。

解决方案

方案1:手动转义换行符

在解析前,将body中的原始换行符替换为JSON规范的转义形式:

import json

def lambda_handler(event, context):
    # 处理body中的换行、回车符,转为JSON兼容的转义格式
    processed_body = event['body'].replace('\n', '\\n').replace('\r', '\\r')
    try:
        body = json.loads(processed_body)
        # 业务逻辑处理
        return {
            'statusCode': 200,
            'body': json.dumps({'result': 'success', 'data': body})
        }
    except json.JSONDecodeError as e:
        return {
            'statusCode': 400,
            'body': json.dumps({'error': f'JSON解析失败: {str(e)}'})
        }

方案2:使用ast.literal_eval解析(适用于可控请求场景)

如果请求体本身是合法的Python字典格式(只是换行未转义),可以用ast.literal_eval先解析为字典,再转为标准JSON格式:

import json
import ast

def lambda_handler(event, context):
    try:
        # 解析带原始换行的字符串为字典
        body_dict = ast.literal_eval(event['body'])
        # 转为标准JSON字符串后再解析(可选,若直接使用字典可跳过此步)
        body = json.loads(json.dumps(body_dict))
        # 业务逻辑处理
        return {
            'statusCode': 200,
            'body': json.dumps({'result': 'success', 'data': body})
        }
    except (SyntaxError, json.JSONDecodeError) as e:
        return {
            'statusCode': 400,
            'body': json.dumps({'error': f'数据格式错误: {str(e)}'})
        }

额外建议

如果请求发送方由你控制,建议在发送请求前用json.dumps()处理请求体,自动完成换行符的转义,从根源避免问题。

内容的提问来源于stack exchange,提问作者kyagu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:26:15