Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用小写键封送JSON_Json_Go_Amazon Dynamodb_Marshalling - Fatal编程技术网

如何使用小写键封送JSON

如何使用小写键封送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 :=

我使用AWS Lambda和使用golang的DynamoDB

我的DynamoDB表使用小写属性名,如
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”
。是的,我也看到了,谢谢,这真的很简单,我在阅读文档时做得很糟糕,谢谢