如何在结构中定义多个名称标签


137

我需要从mongo数据库中获取项目,所以我定义了一个这样的结构

type Page struct {
    PageId string                 `bson:"pageId"`
    Meta   map[string]interface{} `bson:"meta"`
}

现在,我还需要将其编码为JSON,但它会将字段编码为大写(我得到PageId而不是pageId),因此我还需要为JSON定义字段标签。我尝试过类似的方法,但是没有用:

type Page struct {
    PageId string                 `bson:"pageId",json:"pageId"`
    Meta   map[string]interface{} `bson:"meta",json:"pageId"`
}

那么,如何在结构中定义多个名称标签呢?

Answers:


238

它在reflect软件包的文档中说:

按照惯例,标签字符串是由空格分隔的键:“值”对的串联。每个键都是一个非空字符串,由空格(U + 0020''),引号(U + 0022'“')和冒号(U + 003A':')以外的非控制字符组成。每个值都用引号引起来。使用U + 0022'“'字符和Go字符串文字语法。

您需要做的是使用空格而不是逗号作为标记字符串分隔符。

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"meta"`
}

5
另外,请确保仅用空格隔开,不要用制表符隔开。cf. stackoverflow.com/questions/20215510/...
GreenRaccoon23

68

感谢您接受答案。

以下仅适用于像我这样的懒人。

不正确

type Page struct {
    PageId string                 `bson:"pageId",json:"pageId"`
    Meta   map[string]interface{} `bson:"meta",json:"pageId"`
}

正确

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"pageId"`
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.