【问题标题】:How to make lambda function return a json containing an image in python如何使lambda函数返回一个包含python中图像的json
【发布时间】:2020-12-24 10:16:49
【问题描述】:

我正在构建一个 Web 应用程序,该应用程序将一些信息发送到 API(AWS 的 API 网关),它会接收回一个图像和有关该图像的一些信息(字符串)。字符串和图像由 python 编写的 lambda 函数(AWS 服务)生成。

阅读this 我使用base64 库将我的图像转换为Base64 编码并将其作为我的json 响应的一部分发送,但我得到Object of type bytes is not JSON serializable,我该如何解决这个问题?

question 的答案显示的代码与我的代码做的事情相同,但在该答案的 cmets 中它说代码有效,而我的无效,我做错了吗?

这是我的代码:

def f():
    ...
    bio = BytesIO()
    plt.savefig(bio, format="png")

    bio.seek(0)
    my_base64_jpgData = base64.b64encode(bio.read())
    result["image"] = my_base64_jpgData
    return result

def lambda_handler(event, context):
    body = event["body"]

    result = handler(body)

    return {
        'statusCode': 200,
        'body': json.dumps(result)
    }

如果我在本地对此进行测试,我可以避免执行 json.dumps() 并仅返回 result,但在 lambda 函数中尝试相同的代码会使其失败,因为(我认为)发送响应之前的 lambda 函数应用 json.dumps给它。

编辑: this question 的答案还说要做我所做的(使用 base64),但我不明白为什么它对我不起作用

【问题讨论】:

    标签: python json amazon-web-services aws-lambda httpresponse


    【解决方案1】:

    b64encode 返回字节。要将其转换为str,以下内容就足够了:

    result["image"] = my_base64_jpgData.decode()
    

    随后,您的代码可能是:

    def f():
        ...
        bio = BytesIO()
        plt.savefig(bio, format="png")
    
        bio.seek(0)
        my_base64_jpgData = base64.b64encode(bio.read())
        result["image"] = my_base64_jpgData.decode()
        return result
    
    def lambda_handler(event, context):
        body = event["body"]
    
        result = handler(body)
    
        return {
            'statusCode': 200,
            'body': json.dumps(result)
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      • 2021-08-24
      • 2023-03-12
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      • 2019-04-10
      相关资源
      最近更新 更多