[英]Can one run a PutItem in DynamoDB in Golang without using a struct?
AWS 的所有示例都涉及在使用 DynamoDB 执行任何操作之前使用结构来组织和优化您的数据。 请参阅: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/dynamo-example-create-table-item.html
对于我的项目,我从第三方 API 获得了 JSON 字符串。 我实际上想将整个 JSON object 存储在 DynamoDB 中,但我无法确定没有结构是否可行。 因为我正在与第三方 API 合作,所以我无法保证我将获得哪些字段,或者这些字段将来是否会更改。 这可以做到吗? 在 NodeJS 中这很容易,但我知道 Go 是静态类型的,所以它可能是不可能的。
您可以使用 map[string]interface{} 类型的 var 吗? 并解组到那个?
您将始终需要一个结构用于您的项目 static 键和/或范围。 JSON 可以 go 在另一个类型为map
的字段中,该字段可以包含项目或嵌套映射。 然后让attributevalue.MarshalMap
将整个结构转换为DynamoDB map 。
type Record struct {
ID string
JSON map[string]interface{}
}
r := Record{
ID: "ABC123",
JSON: map[string]interface{}{
"Parent": "aa",
"Children": map[string]interface{}{
"Child1": "foo",
"Child2": "bar",
},
},
}
av, err := attributevalue.MarshalMap(r)
if err != nil {
return fmt.Errorf("failed to marshal Record, %w", err)
}
_, err = client.PutItem(context.TODO(), &dynamodb.PutItemInput{
TableName: aws.String(myTableName),
Item: av,
})
if err != nil {
return fmt.Errorf("failed to put Record, %w", err)
}
示例部分取自https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.