AWS 的所有示例都涉及在使用 DynamoDB 执行任何操作之前使用结构来组织和优化数据。请参阅:https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/dynamo-example-create-table-item.html
对于我的项目,我从第三方 API 获取一个 JSON 字符串。我实际上想将整个 JSON 对象存储在 DynamoDB 中,但我无法确定是否可以在没有结构的情况下实现。因为我正在使用第三方 API,所以我无法保证我会获得哪些字段,或者这些字段将来是否会发生变化。这可以做到吗?在 NodeJS 中这很容易,但我知道 Go 是静态类型的,所以这可能是不可能的。
最佳答案
您始终需要一个用于项目静态键和/或范围的结构。 JSON 可以放入 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
关于json - 可以在不使用结构的情况下在 Golang 的 DynamoDB 中运行 PutItem 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59349269/