AWS Lambda添加引号以形成事件输入

2024-04-20 04:03:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python3.8AWS Lambda函数,它从web应用程序接收表单输入。来自表单输入的数据传递到Lambda函数,并位于事件字典中。问题是lambda无法将其识别为表并将其转换为字符串。下面是我的JS和Python代码

    function addPart(partName) {
        var raw = JSON.stringify({'partName':partName});
        $.ajax({
            method: 'POST',
            url: "Insert URL Here", // I have a real (working) invoke URL here
            headers: {
                Authorization: authToken
            },
            body: raw,
            contentType: 'application/json',
            success: completeRequest,
            error: function ajaxError(jqXHR, textStatus, errorThrown) {
                console.error('Error requesting ride: ', textStatus, ', Details: ', errorThrown);
                console.error('Response: ', jqXHR.responseText);
                alert('An error occured when adding your part:\n' + jqXHR.responseText);
            }
        });
    }
import boto3
import json

dynamodb = boto3.resource('dynamodb')

UniqueUser = "test"
partName = "default"

def lambda_handler(event, context):
    UniqueUser = event['requestContext']['authorizer']['claims']['sub']
    partName = event['partName']
    # partName = event['body']['partName']  
    table = dynamodb.Table('Parts')
    response = table.put_item(
       Item={
            'UserID': UniqueUser,
            'PartName': partName
        }
    )
    print(event)
    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Origin': '*'
        },
        'body': json.dumps(partName)
    }

这是对print(event)行的响应的相关部分。问题在于,dispite的格式类似于Python库,它在引号中,充当字符串。有人知道如何解决这个问题吗

'body': '{"partName":"test"}'

Tags: lambda函数字符串eventjson表单rawfunction
2条回答

在你的lambda_handler中,你有

 'body': json.dumps(partName)

因为partName可能是{"partName":"test"},所以json.dumps 函数将把partName序列化为str,结果 在'{"partName":"test"}'

为了避免这种情况,您可以直接返回partName

    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Origin': '*'
        },
        'body': partName
    }

另一种方法是在客户端的JS中使用JSON.parse来反序列化json字符串

我使用deceze的注释建议解决了这个问题,并将其解析为字典。这是我比较它的代码:

dictString = event['body']
attributeDict = ast.literal_eval(dictString)
partName = attributeDict["partName"]

相关问题 更多 >