gpt4 book ai didi

json - 如何使用小写键编码 JSON

转载 作者:数据小太阳 更新时间:2023-10-29 03:03:01 26 4
gpt4 key购买 nike

我使用 AWS Lambda 和使用 golang 的 DynamoDB。

我的 DynamoDB 表使用小写属性名称,例如 idname .

在 Go 中,如果我希望能够正确编码结构,我必须以大写字母开头来命名字段。

type Item struct {
ID string
Name string
}

要将项目放入我的 DynamoDB 表中,我必须将其编码到 map[string]*dynamodb.AttributeValue 中, 使用 dynamodbattribute.MarshalMap功能。

item := Item{
ID: "xxxx",
Name: "yyyy"
}

av, _ := dynamodbattribute.MarshalMap(item)

当然,这会创建一个 map使用写成 ID 的名称和 Name , 与 id 不兼容和 name来自 dynamodb 表。

阅读文档,我发现您可以使用自定义编码器,并启用 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 一起使用? ?还是我用错了?

编辑:

好的,正如 Zak 指出的那样,有一个 dynamodbav可以使用的标签。

我还发现我正在使用 json以错误的方式标记。我应该使用语法 json:"id"而不是 json="id" .

事实上,DynamoDB SDK 会使用 json 标签(如果可用),并且这个标签可以被 dynamodbav 覆盖。 .

所以我所要做的就是让我的结构看起来像这样并且它起作用了

type Item struct {
ID string `json:"id"`
Name string `json:"name"`
}

最佳答案

Dynamo 内置编码,来自 MarshalMap(...) 可以支持结构标签,类似于 json。

您可以将它们添加到您正在编码的类型中,如下所示:

type Item struct {
ID string `dynamodbav:"id"`
Name string `dynamodbav:"name"`
}

See the docs here

关于json - 如何使用小写键编码 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50852335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com