AWS DynamoDB流python转换本机格式

AWS DynamoDB流python转换本机格式,python,amazon-web-services,aws-lambda,amazon-dynamodb,amazon-dynamodb-streams,Python,Amazon Web Services,Aws Lambda,Amazon Dynamodb,Amazon Dynamodb Streams,我有一个由DynamoDB流触发的Lambda函数。我的问题是接收到的事件的奇怪格式(每个键/值的类型) 是否存在将整个文档转换为本机python格式(无任何类型)的变通方法。我正在寻找一个动态的解决方案,因为将来我想将这个lambda用于其他格式不同的DynamoDB表流(多个dict/list级别) 例如: { "Records": [ { "eventID": "1", "eventVersion": "1.0", "dynamodb": {

我有一个由DynamoDB流触发的Lambda函数。我的问题是接收到的事件的奇怪格式(每个键/值的类型)

是否存在将整个文档转换为本机python格式(无任何类型)的变通方法。我正在寻找一个动态的解决方案,因为将来我想将这个lambda用于其他格式不同的DynamoDB表流(多个dict/list级别)

例如:

{
  "Records": [
    {
      "eventID": "1",
      "eventVersion": "1.0",
      "dynamodb": {
        "Keys": {
          "Id": {
            "N": "101"
          }
        },
        "NewImage": {
          "Message": {
            "S": "New item!"
          },
          "Id": {
            "N": "101"
          }
        },
        "StreamViewType": "NEW_AND_OLD_IMAGES",
        "SequenceNumber": "111",
        "SizeBytes": 26
      },
      "awsRegion": "us-west-2",
      "eventName": "INSERT",
      "eventSourceARN": "arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899",
      "eventSource": "aws:dynamodb"
    },
    {
      "eventID": "2",
      "eventVersion": "1.0",
      "dynamodb": {
        "OldImage": {
          "Message": {
            "S": "New item!"
          },
          "Id": {
            "N": "101"
          }
        },
        "SequenceNumber": "222",
        "Keys": {
          "Id": {
            "N": "101"
          }
        },
        "SizeBytes": 59,
        "NewImage": {
          "Message": {
            "S": "This item has changed"
          },
          "Id": {
            "N": "101"
          }
        },
        "StreamViewType": "NEW_AND_OLD_IMAGES"
      },
      "awsRegion": "us-west-2",
      "eventName": "MODIFY",
      "eventSourceARN": "arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899",
      "eventSource": "aws:dynamodb"
    },
    {
      "eventID": "3",
      "eventVersion": "1.0",
      "dynamodb": {
        "Keys": {
          "Id": {
            "N": "101"
          }
        },
        "SizeBytes": 38,
        "SequenceNumber": "333",
        "OldImage": {
          "Message": {
            "S": "This item has changed"
          },
          "Id": {
            "N": "101"
          }
        },
        "StreamViewType": "NEW_AND_OLD_IMAGES"
      },
      "awsRegion": "us-west-2",
      "eventName": "REMOVE",
      "eventSourceARN": "arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899",
      "eventSource": "aws:dynamodb"
    }
  ]
}

谢谢

我一直在使用它,它一直很好地为我们服务,直到现在:

from boto3.dynamodb.types import TypeDeserializer

serializer = TypeDeserializer()

def deserialize(data):
    if isinstance(data, list):
       return [deserialize(v) for v in data]

    if isinstance(data, dict):
        try: 
            return serializer.deserialize(data)
        except TypeError:
            return { k : deserialize(v) for k, v in data.iteritems() }
    else:
        return data

美好的谢谢,太完美了,谢谢你!