Python JSON 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

我有一个托管在aws上的python函数,它接收一个事件,然后执行一系列操作,但本质上问题在于解析传入的POST请求

我的代码如下所示:

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