AWS Lambda 在表单事件输入中添加引号 [重复]
Posted
技术标签:
【中文标题】AWS Lambda 在表单事件输入中添加引号 [重复]【英文标题】:AWS Lambda adds quotes to form event input [duplicate] 【发布时间】:2020-11-10 11:04:39 【问题描述】:我有一个 Python 3.8 AWS 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)
行的响应的相关部分。问题是,尽管被格式化为 Python 库,但它是在引号中并充当字符串。有谁知道如何解决这个问题?
'body': '"partName":"test"'
【问题讨论】:
在你的回报中使用'body': partName
。
您正在发送 JSON。 JSON 是一个字符串,是的。你需要解析它。
【参考方案1】:
在你的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字符串。
【讨论】:
【参考方案2】:我使用 deceze 的评论建议解决了这个问题,并将其解析为字典。这是我解析它的代码:
dictString = event['body']
attributeDict = ast.literal_eval(dictString)
partName = attributeDict["partName"]
【讨论】:
使用json.loads()
!这是 JSON!以上是关于AWS Lambda 在表单事件输入中添加引号 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何将 AWS cloudwatch 事件添加到基于具有 terraform 的容器映像的 aws_lambda_function?
通过 cloudformation 的 AWS Lambda 计划事件源