如何使用小写键封送JSON
我使用AWS Lambda和使用golang的DynamoDB 我的DynamoDB表使用小写属性名,如如何使用小写键封送JSON,json,go,amazon-dynamodb,marshalling,Json,Go,Amazon Dynamodb,Marshalling,我使用AWS Lambda和使用golang的DynamoDB 我的DynamoDB表使用小写属性名,如id或name 在Go中,如果我想正确封送结构,我必须以大写字母开头命名字段 type Item struct { ID string Name string } 要将项目放入我的DynamoDB表中,我必须使用dynamodbattribute.marshallmap函数将其封送到map[string]*DynamoDB.AttributeValue中 item :=
id
或name
在Go中,如果我想正确封送结构,我必须以大写字母开头命名字段
type Item struct {
ID string
Name string
}
要将项目放入我的DynamoDB表中,我必须使用dynamodbattribute.marshallmap
函数将其封送到map[string]*DynamoDB.AttributeValue
中
item := Item{
ID: "xxxx",
Name: "yyyy"
}
av, _ := dynamodbattribute.MarshalMap(item)
当然,这将使用写为ID
和Name
的名称创建map
,它们与dynamodb表中的ID
和Name
不兼容
阅读文档后,我发现可以使用自定义编码器并启用json标记
type Item struct {
ID string `json="id"`
Name string `json="name"`
}
func setOpts(encoder *dynamodbattribute.Encoder) {
// Not sure which one I sould set
// So I set them both :)
encoder.SupportJSONTags = true
encoder.MarshalOptions.SupportJSONTags = true
}
func main() {
encoder := dynamodbattribute.NewEncoder(setOpts)
encoder.Encode(...)
}
但是这里的encoder.Encode()
方法仅用于创建dynamodb.AttributeValue
,而不是map[string]*dynamodb.AttributeValue
有没有办法将自定义编码器与MarshalMap
一起使用?还是我用错了
编辑:
好的,正如扎克指出的,有一个dynamodbav
标签可以使用
我还发现我以错误的方式使用了json
标记。我应该使用语法json:“id”
而不是json=“id”
事实上,dynamodbsdk使用json标记(如果可用),这个标记可以被dynamodbav
覆盖
所以我所要做的就是让我的结构看起来像这样,并且它工作了
type Item struct {
ID string `json:"id"`
Name string `json:"name"`
}
Dynamo的内置封送,来自
封送映射(…)
可以支持结构标记,类似于json
您可以将它们添加到正在编组的类型中,如下所示:
type Item struct {
ID string `dynamodbav:"id"`
Name string `dynamodbav:"name"`
}
JSON标签的格式应该是
JSON:“id”
而不是JSON=“id”
。是的,我也看到了,谢谢,这真的很简单,我在阅读文档时做得很糟糕,谢谢