如何使 lambda 函数 return 成为包含 python 中的图像的 json
How to make lambda function return a json containing an image in python
我正在构建一个 Web 应用程序,它将一些信息发送到 API(AWS 的 API 网关),它会接收回图像和关于该图像的一些信息(字符串)。字符串和图像由写在 python.
中的 lambda 函数(AWS 服务)生成
正在阅读 我使用 base64 库将我的图像转换为 Base64 编码并将其作为我的 json 响应的一部分发送,但我收到 Object of type bytes is not JSON serializable
,我该如何解决这个问题?
这个 的答案显示的代码与我的代码做的事情相同,但在该答案的评论中它说代码有效,而我的代码却没有,我是不是做错了什么?
这是我的代码:
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()
和 return result
,但是在 lambda 函数中尝试相同的代码会使它失败,因为(我认为)发送响应之前的 lambda 函数对其应用 json.dumps。
编辑:
的答案也说做我所做的(使用 base64),但我不明白为什么它对我不起作用
b64encode returns 字节。要将其转换为 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)
}
我正在构建一个 Web 应用程序,它将一些信息发送到 API(AWS 的 API 网关),它会接收回图像和关于该图像的一些信息(字符串)。字符串和图像由写在 python.
中的 lambda 函数(AWS 服务)生成正在阅读 Object of type bytes is not JSON serializable
,我该如何解决这个问题?
这个
这是我的代码:
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()
和 return result
,但是在 lambda 函数中尝试相同的代码会使它失败,因为(我认为)发送响应之前的 lambda 函数对其应用 json.dumps。
编辑:
b64encode returns 字节。要将其转换为 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)
}