Skip to content Skip to sidebar Skip to footer

How To Convert From Dynamodb Wire Protocol To Native Python Object Manually With Boto3?

I have a Lambda that is being triggered by a DynamoDB stream. The Lambda does some processing and then creates a notification on a topic in SNS. Ideally I would like to include t

Solution 1:

I have a similar situation and I used the following an approach like this:

from boto3.dynamodb.types importTypeDeserializerdeser= TypeDeserializer()

...
<in handler>
    forrecordin 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])

This approach works for me. The resulting dictionary d contains the converted object rather than the wire-format version passed to the handler.

Solution 2:

Using TypeDeserializer didn't work for me for some reason. This utility did, however:

https://github.com/Alonreznik/dynamodb-json

Those not wanting to deal with emulating pip install inside a Lambda function, you can just copy and paste this source file (containing the loads() function) into your own code:

https://github.com/Alonreznik/dynamodb-json/blob/master/dynamodb_json/json_util.py

Post a Comment for "How To Convert From Dynamodb Wire Protocol To Native Python Object Manually With Boto3?"