AWS DynamoDB流python转换本机格式
我有一个由DynamoDB流触发的Lambda函数。我的问题是接收到的事件的奇怪格式(每个键/值的类型) 是否存在将整个文档转换为本机python格式(无任何类型)的变通方法。我正在寻找一个动态的解决方案,因为将来我想将这个lambda用于其他格式不同的DynamoDB表流(多个dict/list级别) 例如: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": {
{
"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
美好的谢谢,太完美了,谢谢你!