如何将DynamoDBEvent属性值转换为标准JSON格式?
解决方法
AWS 确实提供了现成的转换工具,不用硬编码或反射就能处理:
- 使用 AWS Go SDK v2 里的
attributevalue.UnmarshalMap方法(对应 SDK v1 的dynamodbattribute.UnmarshalMap),它能自动识别 DynamoDB 属性的类型标识(S、N、BOOL 等),把带标识的结构转换成对应的 Go 原生类型(字符串、数字、布尔值等)。 - 转换后再用标准库的
json.Marshal就能得到符合预期的标准 JSON,示例代码如下:
import ( "encoding/json" "github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue" "github.com/aws/aws-lambda-go/events" ) func handleDynamoDBStream(event events.DynamoDBEvent) error { for _, record := range event.Records { // 把DynamoDB格式的NewImage转成Go原生map var targetItem map[string]interface{} if err := attributevalue.UnmarshalMap(record.Change.NewImage, &targetItem); err != nil { return err } // 生成标准JSON standardJSON, err := json.Marshal(targetItem) if err != nil { return err } // 这里可以处理生成好的标准JSON } return nil }
- 如果你的数据有固定结构,还可以直接定义对应的 Go 结构体,把
targetItem换成结构体变量,序列化后的 JSON 会更贴合你的业务模型,类型匹配也更精准。
内容的提问来源于stack exchange,提问作者Woody1193
相关产品推荐
相关产品推荐

