Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用boto3手动将DynamoDB wire协议转换为本机Python对象?_Python_Amazon Dynamodb_Boto_Boto3 - Fatal编程技术网

如何使用boto3手动将DynamoDB wire协议转换为本机Python对象?

如何使用boto3手动将DynamoDB wire协议转换为本机Python对象?,python,amazon-dynamodb,boto,boto3,Python,Amazon Dynamodb,Boto,Boto3,我有一个Lambda被DynamoDB流触发。Lambda进行一些处理,然后在SNS中创建关于主题的通知。理想情况下,我希望在发送给SNS的通知中包含整个新文档,这样下游客户就不必点击DynamoDB来获取数据 我遇到的问题是,来自DynamoDB流的数据是dynamodbwire格式的(映射包括作为键的数据类型)。当我向下游客户发送通知时,我不希望他们必须理解dynamodbwire格式来解析消息(例如,如果我切换到一个新的底层数据存储,那么我就必须重新创建该格式) 显然,boto3客户端能够

我有一个Lambda被DynamoDB流触发。Lambda进行一些处理,然后在SNS中创建关于主题的通知。理想情况下,我希望在发送给SNS的通知中包含整个新文档,这样下游客户就不必点击DynamoDB来获取数据

我遇到的问题是,来自DynamoDB流的数据是dynamodbwire格式的(映射包括作为键的数据类型)。当我向下游客户发送通知时,我不希望他们必须理解dynamodbwire格式来解析消息(例如,如果我切换到一个新的底层数据存储,那么我就必须重新创建该格式)


显然,boto3客户端能够将这种格式解析为Python对象,有没有办法让我自己访问解析器?据我所知,它在从DynamoDB获取数据时会被调用,但我自己找不到调用它的方法。

我也有类似的情况,我使用了以下类似的方法:

from boto3.dynamodb.types import TypeDeserializer

deser = TypeDeserializer()

...
<in handler>
    for record in event['Records']:
        old = record['dynamodb'].get('OldImage')
        new = record['dynamodb'].get('NewImage')
        if old:
            d = {}
            for key in old:
                d[key] = deser.deserialize(old[key])
从boto3.dynamodb.types导入类型反序列化器
deser=TypeDeserializer()
...
对于事件['Records']中的记录:
old=记录['dynamodb'].get('OldImage')
new=记录['dynamodb'].get('NewImage')
如果是旧的:
d={}
对于旧版本的密钥:
d[key]=反序列化(旧[key])

这种方法适合我。生成的字典
d
包含转换后的对象,而不是传递给处理程序的wire格式版本。

由于某种原因,使用
类型反序列化器对我不起作用。但是,该实用程序确实:

如果您不想在Lambda函数中模拟
pip install
,您可以将此源文件(包含
loads()
函数)复制并粘贴到您自己的代码中:


生成的
d
对象不能通过
json.dumps()序列化为json