amazon-web-services - Golang DynamoDB UnmarshalListOfMaps 返回空数组

标签 amazon-web-services go nosql amazon-dynamodb

我有一个 DynamoDB 产品表(id (int)、active (bool)、name (string)、price (int)),当我检索并尝试解码该列表时,它返回空。

[{},{}]

结构:

type Product struct {
id     int
active bool
name   string
price  int }

解码代码在这里:

    params := &dynamodb.ScanInput{
    TableName: aws.String("Products"),
}
result, err := service.Scan(params)
if err != nil {
    fmt.Errorf("failed to make Query API call, %v", err)
}

var products = []Product{}

var error = dynamodbattribute.UnmarshalListOfMaps(result.Items, &products)

我在这里做错了什么?

最佳答案

只有公共(public)字段可以被解码。

使用大写字母公开您的结构字段,并使用 json 属性将它们映射到数据值:

type Product struct {
    ID     int    `json:"id"`
    Active bool   `json:"active"`
    Name   string `json:"name"`
    Price  int    `json:"price"`
}

2021 年 10 月更新:

AWS SDK v1 使用 json 属性进行 DynamoDB 序列化。 新版本aws-sdk-go-v2包含重大更改,并从 json 移动到 dynamodbav 属性,以分隔 JSON 和 DynamoDB 名称。

对于 V2 结构应如下所示:

type Product struct {
    ID     int    `dynamodbav:"id"`
    Active bool   `dynamodbav:"active"`
    Name   string `dynamodbav:"name"`
    Price  int    `dynamodbav:"price"`
}

文档:https://docs.aws.amazon.com/sdk-for-go/api/service/dynamodb/dynamodbattribute/#Marshal

关于amazon-web-services - Golang DynamoDB UnmarshalListOfMaps 返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53698997/

相关文章:

javascript - 无法使用 Javascript 通过 ExpressionFilter 访问 DynamoDB 项目的映射属性值

amazon-web-services - 使用 SAM 模板为 Lambda 事件创建非代理 API 网关

go - 在 Go 中使用 defer

go - 将接口(interface)引入结构

mongodb - 实时统计(示例)。无SQL

java - com.amazonaws.transform.JsonErrorUnmarshaller : method <init>(Ljava/lang/Class;)V not found

amazon-web-services - Kubernetes 部署不进行滚动更新

go - 解析片段并找到所有顶级定义

database - DynamoDB 如何设计和查询多个字段

domain-driven-design - CouchDB/NoSQL 和领域驱动设计?