json - 可以在不使用结构的情况下在 Golang 的 DynamoDB 中运行 PutItem 吗?

标签 json go struct amazon-dynamodb

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/

相关文章:

java - 解析多个 json 对象时出现问题,每个对象都具有来自经过验证的 JSON 格式的多个数组 - JavaString

c++ - 最小化总结构内存

JavaScript/Jquery : How to paginate a JSON object?

javascript - 使用 Node 和 Express 4 使用 res.json 中的数据时出现非法 token

unit-testing - 我如何在 Go 中编写使用 -short 标志的测试,它可以与 -benchmark 标志结合使用吗?

go - 如何使用 golang id3-go 库获取和打印 mp3 Popularimeter 框架

go - 如何计算 goroutine 的执行时间?

c - 写入结构时出现段错误

c++ - 动态访问 union

java - 使用 Jackson 库编辑 JsonArray