gpt4 book ai didi

python - 如何将 Python 对象(不可 JSON 序列化)从一个 (AWS) lambda 函数传递到另一个?

转载 作者:行者123 更新时间:2023-12-01 07:06:18 30 4
gpt4 key购买 nike

如果您尝试发送不可 JSON 序列化的对象(列表、字典、整数等以外的任何对象),您会收到以下错误消息:

"errorMessage": "Object of type set is not JSON serializable"

即使您发送一个元组,它在传递给第二个 lambda 时也会转换为列表

那么,如果您想保留该对象,有哪些解决方法?

最佳答案

一个选项:

  • 使用如下函数创建对象的编码字符串表示形式并传递它:

    def native_object_encoded(x):
    x = pickle.dumps(x)
    x = zlib.compress(x)
    x = base64.b64encode(x).decode()
    return x
  • 在第二个 lambda 函数中,反向执行相同的步骤以获取原始对象:

    def native_object_decoded(s):
    s = base64.b64decode(s)
    s = zlib.decompress(s)
    s = pickle.loads(s)
    return s

用法:

# lambda 1 (the caller)
a = {66, 99, 35} # set: not serializable
payload = {
'a': native_object_encoded(a),
}
response = client.invoke(
...
)

# lambda 2 (the one being invoked)
a = native_object_decoded(event['a'])

注释:

  • 如果对象是自定义类型,则该类型也必须在第二个 lambda 函数中定义。
  • 如果该对象是其他库(标准库或第三方库)的一部分,则应在第二个 lambda 函数中导入该库。
  • 压缩步骤是可选的。

关于python - 如何将 Python 对象(不可 JSON 序列化)从一个 (AWS) lambda 函数传递到另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58432514/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com