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

AWS Lambda Python返回结果JSON序列化错误及转义斜杠问题

问题根因

  • 初始代码报错原因:base64.b64encode()返回的是bytes类型数据,Python标准JSON序列化器不支持直接序列化bytes类型,因此触发序列化错误。另外你把处理后的字典直接用str()转换,得到的是Python风格的字典字符串(比如单引号包裹键值),不是标准JSON格式,本身也不符合数据输出要求。
  • 修改后代码出现多余转义符原因:payload本身已经是解码后的JSON字符串,你额外调用了json.dumps(payload),等于对字符串做了二次JSON序列化,因此会把原JSON里的双引号自动加上转义反斜杠。

修复方案

调整逻辑顺序:先把清洗后的字典转成标准JSON字符串,再做base64编码,最后把bytes类型的编码结果转成字符串即可,同时要把全局变量output挪到函数内部,避免Lambda实例复用时出现脏数据,正确代码如下:

import json
import base64
import string
from typing import Optional, Iterable, Union

delete_dict = {sp_character: '' for sp_character in string.punctuation}
PUNCT_TABLE = str.maketrans(delete_dict)

# 保留你原有clean_keys的实现逻辑,这里补充完整可运行的基础版本
def clean_keys(pairs):
    cleaned_pairs = []
    for k, v in pairs:
        cleaned_k = k.translate(PUNCT_TABLE)
        cleaned_pairs.append((cleaned_k, v))
    return dict(cleaned_pairs)

def lambda_handler(event, context):
    # 变量放到函数内部,避免全局复用导致的旧数据残留
    output = []
    for record in event['records']:
        payload = base64.b64decode(record['data']).decode('utf-8')
        # 清洗键名得到字典对象
        remove_special_char = json.loads(payload, object_pairs_hook=clean_keys)
        # 字典转标准JSON字符串后加换行
        row_w_newline = json.dumps(remove_special_char) + "\n"
        # base64编码后转成字符串,规避bytes无法序列化的问题
        b64_data = base64.b64encode(row_w_newline.encode('utf-8')).decode('utf-8')
        
        output_record = {
            'recordId': record['recordId'],
            'result': 'Ok',
            'data': b64_data
        }
        output.append(output_record)

    print('Processed {} records.'.format(len(event['records'])))
    return {'records': output}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:27:00