【问题标题】:Python AWS Lambda's event body returning string instead of my json objectPython AWS Lambda 的事件主体返回字符串而不是我的 json 对象
【发布时间】:2022-01-17 23:08:44
【问题描述】:

调用代码

import requests
import json
# Create a new resource
data_object = {'key1':'testing'}
response = requests.post('https://fakeurl.execute-api.us-east-1.amazonaws.com/default/My_Test_Event_Lambda', data=data_object)

print(response._content.decode())

Lambda 代码

import json

def lambda_handler(event, context):

    return {
                'statusCode': 200,
                'body': json.dumps(event['body'])
            }

我从调用中得到的响应是"key1=testing" 我不太关心响应,但我希望 lambda 函数能够处理我作为 json 而不是字符串传递的数据。示例:我希望能够说 event['body']['key1'] 并让它返回“testing”

目前 API 网关被用作 lambda 代理。

【问题讨论】:

    标签: aws-lambda aws-api-gateway


    【解决方案1】:

    您收到的event['body'] 是一个字符串。您需要将其从 JSON 解析为 dict:

    d = json.loads(event['body'])
    

    然后,如果需要,您可以通过以下方式将该 dict 作为正文返回:

    return {
        'statusCode': 200,
        'body': json.dumps(d)
    }
    

    就目前而言,您只是在管理字符串。

    【讨论】:

    • 嗯,我在使用您的代码时遇到了关键错误。 { "errorMessage": "'body'", "errorType": "KeyError", "stackTrace": [ " File \"/var/task/lambda_function.py\", line 4, in lambda_handler\n d = json.loads(event['body'])\n" ] }
    • 您是否在 API Gateway 中使用 Lambda 代理集成?"
    • 是的,我正在使用代理集成 Type: LAMBDA_PROXY 显示在集成请求中
    • 您是否调试了日志event 以查看其中的内容?我认为这已经在检索主体,因为您的原始代码使用它。
    • 因为正文实际上不是 JSON,也许?当它应该是 {"key":"value"} 时,它只是 key=value (假设您实际上打算通过接口传递 JSON)。
    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多