Python JSON Post正文未按预期进行分析
我有一个托管在aws上的python函数,它接收一个事件,然后执行一系列操作,但本质上问题在于解析传入的POST请求 我的代码如下所示:Python JSON Post正文未按预期进行分析,python,json,rest,aws-lambda,aws-api-gateway,Python,Json,Rest,Aws Lambda,Aws Api Gateway,我有一个托管在aws上的python函数,它接收一个事件,然后执行一系列操作,但本质上问题在于解析传入的POST请求 我的代码如下所示: import json def lambda_handler(event, context): # TODO implement merchantid = json.dumps(event['body']) return { 'statusCode': 200, 'body': json.dumps(m
import json
def lambda_handler(event, context):
# TODO implement
merchantid = json.dumps(event['body'])
return {
'statusCode': 200,
'body': json.dumps(merchantid)
}
为了发送post请求,我只使用了网站附带的AWSAPI网关测试,所以它不应该是任何奇怪的编码
当我传入一个JSON对象时,我希望merchantid字段存储一个JSON对象
相反,它返回以下字符串:
"\"{\\n \\\"merchantEmail\\\": \\\"timcook@gmail.com\\\",\\n \\\"customerEmail\\\": \\\"billgates@gmail.com\\\",\\n \\\"merchantWallet\\\": \\\"mWallet\\\",\\n \\\"transactionTotal\\\": 1.00,\\n \\\"transactionDenomination\\\": \\\"AUD\\\",\\n \\\"customerCurrency\\\": \\\"EUR\\\",\\n \\\"merchantAccess\\\" : {\\n \\\"merchantKey\\\": \\\"key\\\",\\n \\\"merchantSecret\\\": \\\"secret\\\"\\n },\\n \\\"customerAccess\\\" : {\\n \\\"customerKey\\\": \\\"ckey\\\",\\n \\\"customerSecret\\\": \\\"csecret\\\"\\n }\\n}\""
我从未见过这样的字符串,而且我似乎无法让它返回到JSON格式
有人知道我如何将其返回到正文中提交的原始JSON格式吗
我应该提到,lambda_处理程序在使用测试事件处理JSON时工作得非常好,只有在我开始尝试使用API网关触发它时,我才开始出现这个问题
编辑:
这是作为PUT请求主体传递的JSON对象:
{
"merchantEmail": "timcook@gmail.com",
"customerEmail": "billgates@gmail.com",
"merchantWallet": "mWallet",
"transactionTotal": 1.00,
"transactionDenomination": "AUD",
"customerCurrency": "EUR",
"merchantAccess" : {
"merchantKey": "key",
"merchantSecret": "secret"
},
"customerAccess" : {
"customerKey": "ckey",
"customerSecret": "csecret"
}
}
编辑:
在连接API网关之前,我正在使用
merchantid = event['merchantEmail']
但是一旦我将它作为PUT的主体传入,它将返回502内部服务器错误进入Lambda函数的
事件
参数是python
假设您知道dict结构-您所需要做的就是读取您要查找的值
例如:
data=event['my_key']
进入Lambda函数的event
参数是python
假设您知道dict结构-您所需要做的就是读取您要查找的值
例如:
data=event['my_key']
首先检查事件参数的数据类型是什么,是字符串还是dict
如果正文键值的数据类型是JSON(dict)
merchantid=event.get('body').get('merchantEmail')
如果正文键值的数据类型是String(str)
merchantid=json.loads(event.get('body')).get('merchantEmail')
首先检查事件参数的数据类型是什么,是字符串还是dict
如果正文键值的数据类型是JSON(dict)
merchantid=event.get('body').get('merchantEmail')
如果正文键值的数据类型是String(str)
merchantid=json.load(event.get('body')).get('merchantEmail'))
为什么需要json.dumps?能否请您发布您输入的json对象,以便我们可以尝试重复您所做的操作?为什么需要json.dumps?能否请您发布您输入的json对象,以便我们可以尝试重复您所做的操作?如果我尝试像这样访问它,我认为这是问题的一部分print(type(merchantid))它不打印我认为这是问题的一部分,如果我尝试像这样访问它merchantid=event['body']print(type(merchantid))
它不打印,使用对我有用的加载,因为它被捕获为字符串。即使我在标题中指定了“Content Type”:“application/json”
,我还是有点困惑为什么它没有被捕获为dict。你知道为什么会这样吗?对不起,最后,如果我做了resp=json.loads(event.get('body'))print(resp)print(type(resp))
那么它将以dict类型打印。感谢帮助嵌套的json以字符串形式出现,即使你传递了“Content type”“设置为application/jsontanks Mrinal,使用加载对我来说很有用,因为它被捕获为字符串。即使我在标题中指定了“Content Type”:“application/json”
,我还是有点困惑为什么它没有被捕获为dict。你知道为什么会这样吗?对不起,最后,如果我做了resp=json.loads(event.get('body'))print(resp)print(type(resp))
那么它将以dict类型打印。感谢您的帮助,嵌套的json以字符串形式出现,即使您将“Content type”设置为application/json