AWS Lambda python API 调用方法未返回 JSON - 不可序列化?

AWS Lambda python API call method not returning JSON - not serialisable?

我有一个 Lambda 函数,它是对 API 的基本 Python GET 调用。它在本地工作正常,但是当我上传到 Lambda(连同请求库)时,它不会 return 来自 API 调用的 JSON 响应。我只是想让它 return 整个 JSON 对象给调用者。我在这里做了一些根本性的错误吗 - 我偶然发现了几篇文章说不支持从 Lambda Python 函数 returning JSON 。

代码如下:

import requests
import json
url = "http://url/api/projects/"
headers = {
   'content-type': "application/json",
   'x-octopus-apikey': "redacted",
   'cache-control': "no-cache"
    }

def lambda_handler(event, context):
    response = requests.request("GET", url, headers=headers)
    return response

我的包包含请求库和 dist,以及 json 库(不过我认为它不需要这个)。错误消息 returned 是:

    {
  "stackTrace": [
    [
      "/usr/lib64/python2.7/json/__init__.py",
      251,
      "dumps",
      "sort_keys=sort_keys, **kw).encode(obj)"
    ],
    [
      "/usr/lib64/python2.7/json/encoder.py",
      207,
      "encode",
      "chunks = self.iterencode(o, _one_shot=True)"
    ],
    [
      "/usr/lib64/python2.7/json/encoder.py",
      270,
      "iterencode",
      "return _iterencode(o, 0)"
    ],
    [
      "/var/runtime/awslambda/bootstrap.py",
      41,
      "decimal_serializer",
      "raise TypeError(repr(o) + \" is not JSON serializable\")"
    ]
  ],
  "errorType": "TypeError",
  "errorMessage": "<Response [200]> is not JSON serializable"
}

我已经解决了这个问题 - 我的 Python 代码的问题是它试图 return 整个 响应,而不是简单的JSON 正文(我本地版本的代码打印 'response.text')。此外,我已确保响应采用 JSON 格式(而不是原始文本)。更新代码:

import requests
import json
url = "http://url/api/projects/"
headers = {
   'content-type': "application/json",
   'x-octopus-apikey': "redacted",
   'cache-control': "no-cache"
    }

def lambda_handler(event, context):
    response = requests.request("GET", url, headers=headers)           
    try:
        output = response.json()
    except ValueError:
        output = response.text
    return output

我也遇到了同样的错误,有一段时间我可以通过更改 Lambda 中的响应代码来解决这个问题 python3.6:

更改:response['Body'].read()response['Body'].read().decode()

这样你会得到一个 JSON 虽然在我的例子中我得到了 / 后来我删除了。