首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以字符串形式返回JSON数据的AWS Lambda

以字符串形式返回JSON数据的AWS Lambda
EN

Stack Overflow用户
提问于 2020-04-17 10:49:19
回答 3查看 11.8K关注 0票数 6

我使用来创建API,并希望以JSON格式返回数组的数据。但是,当我调用lambda时,它能够返回所需的JSON数据,但它是以双引号的字符串形式出现的。我试着在Python中运行相同的代码,一切正常,但是当我试图在Lambda中返回它时,它将以字符串的形式出现。这与Lambda如何在Python函数中处理return语句有关吗?这就是我在Lambda中返回数据的方式:

代码语言:javascript
运行
复制
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编码器。

我得到的输出是:

代码语言:javascript
运行
复制
{
  "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"只返回一个没有双引号的数据数组,如下所示:

代码语言:javascript
运行
复制
"body": [{\"Dp_Record_Id\": 2, \"DP_TYPE\": \"NSDL\", \"DP_ID\": \"40877589\", \"CLIENT_ID\": \"1232\", \"Default_flag\": \"Y\"}]

请让我知道这是否可能,如何做到这一点。如能在这方面提供任何帮助,将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-17 10:57:48

我不确定这是否是你想要的,但你可以直接做'body': json_data。我现在在我的λ函数中测试了这一点:

Lambda函数

代码语言:javascript
运行
复制
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
        }    

结果

代码语言:javascript
运行
复制
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"
    }
  ]
}
票数 5
EN

Stack Overflow用户

发布于 2020-04-17 10:55:44

可能客户端没有正确理解类型,请尝试将以下内容添加到"headers"字典中:

代码语言:javascript
运行
复制
"content-type":"application/json",
票数 1
EN

Stack Overflow用户

发布于 2022-03-29 11:43:18

在创建API时,我遇到了同样的问题,我从内存中做了一些事情。为我自己和其他人发这个答案。

问题是,我在lambda中返回的任何内容都是作为对API的响应传递的。相反,只应将body中的数据作为响应传递。

之所以会发生这种情况,是因为当我创建资源时,我忘记选中复选框以使用Lambda代理集成。以下是你必须做的事情:

  1. 删除现有方法并创建一个新方法。这一次,请确保检查使用Lambda代理

  1. 创建一个部署到您的阶段。在此之前,这一变化将不会反映。这就是我被困的地方,大部分时间都是在这里度过的。--
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61269796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档