我使用来创建API,并希望以JSON格式返回数组的数据。但是,当我调用lambda时,它能够返回所需的JSON数据,但它是以双引号的字符串形式出现的。我试着在Python中运行相同的代码,一切正常,但是当我试图在Lambda中返回它时,它将以字符串的形式出现。这与Lambda如何在Python函数中处理return
语句有关吗?这就是我在Lambda中返回数据的方式:
return {
'statusCode': 200,
'headers': {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": 'GET, POST, PUT, DELETE, OPTIONS'
},
'body': json.dumps(json_data,default = myconverter)
}
这里,json_data
是一个python列表,它使用从数据库中检索的数据填充,用于用户传递的特定唯一ID,而myconverter
是我编写的JSON编码器。
我得到的输出是:
{
"statusCode": 200,
"headers": {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS"
},
"body": "[{\"Dp_Record_Id\": 2, \"DP_TYPE\": \"NSDL\", \"DP_ID\": \"40877589\", \"CLIENT_ID\": \"1232\", \"Default_flag\": \"Y\"}]"
}
在这里,我希望"body"
只返回一个没有双引号的数据数组,如下所示:
"body": [{\"Dp_Record_Id\": 2, \"DP_TYPE\": \"NSDL\", \"DP_ID\": \"40877589\", \"CLIENT_ID\": \"1232\", \"Default_flag\": \"Y\"}]
请让我知道这是否可能,如何做到这一点。如能在这方面提供任何帮助,将不胜感激。
发布于 2020-04-17 10:57:48
我不确定这是否是你想要的,但你可以直接做'body': json_data
。我现在在我的λ函数中测试了这一点:
Lambda函数
import json
def lambda_handler(event, context):
json_data = [{"Dp_Record_Id": 2,
"DP_TYPE": "NSDL",
"DP_ID": "40877589",
"CLIENT_ID": "1232",
"Default_flag": "Y"}]
return {'statusCode': 200,
'headers': {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": 'GET, POST, PUT, DELETE, OPTIONS'
},
'body': json_data
}
结果
Response:
{
"statusCode": 200,
"headers": {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS"
},
"body": [
{
"Dp_Record_Id": 2,
"DP_TYPE": "NSDL",
"DP_ID": "40877589",
"CLIENT_ID": "1232",
"Default_flag": "Y"
}
]
}
发布于 2020-04-17 10:55:44
可能客户端没有正确理解类型,请尝试将以下内容添加到"headers"
字典中:
"content-type":"application/json",
发布于 2022-03-29 11:43:18
在创建API时,我遇到了同样的问题,我从内存中做了一些事情。为我自己和其他人发这个答案。
问题是,我在lambda中返回的任何内容都是作为对API的响应传递的。相反,只应将body
中的数据作为响应传递。
之所以会发生这种情况,是因为当我创建资源时,我忘记选中复选框以使用Lambda代理集成。以下是你必须做的事情:
https://stackoverflow.com/questions/61269796
复制相似问题