将 DynamoDBAttributeValues 解组为具有不同属性的结构

我从 dynamodb 读取了一些数据。这就是我得到的


{

  Item: {

    rating: {

      N: "6"

    },

    pk: {

      S: "artist-1"

    },

    gender: {

      S: "woman"

    },

    sk: {

      S: "Alexandra A"

    }

  }

}

现在我有一个看起来像这样的结构:


type Artist struct {

    ArtistID string  `json:"id"`

    Gender   string  `json:"gender"`

    Name     string  `json:"name"`

    Rating   float64 `json:"rating"`

}

现在我做


artist := model.Artist{}

err = dynamodbattribute.UnmarshalMap(result.Item, &artist)

现在我可以使用artist.gender. 所以这很好,但我不能为 ArtistId 这样做,因为它在我的 dynamodb 中被称为 pk 并且我使用 'id' 作为我的结构。什么是解决这个问题的干净方法?我不想在结构中用 'pk' 替换我的 'id'。


绝地无双
浏览 105回答 1
1回答

拉风的咖菲猫

UnmarshalMap()不支持任何给定的标签 Unmarshal。如果您不想在结构中使用 'pk' 更改 'id',则必须在 map 之前手动设置pkinid键的值。UnmarshalMapfunc UnmarshalMap(m map[string]*dynamodb.AttributeValue, out interface{}) error {    m["id"] = m["pk"]    dynamodbattribute.UnmarshalMap(m, out)}最好为这种特殊情况调整创建一个自己的通用 Unmarshal 函数,然后UnmarshalMap()在内部调用。artist := model.Artist{}err = UnmarshalMap(result.Item, &artist)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go