【问题标题】:How to define multiple name tags in a struct如何在结构中定义多个名称标签
【发布时间】:2013-09-09 05:58:50
【问题描述】:

我需要从 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"`
}

那么如何做到这一点,在一个结构体中定义多个名称标签呢?

【问题讨论】:

    标签: json struct go


    【解决方案1】:

    上面写着in the documentation of the reflect package:

    按照惯例,标签字符串是可选用空格分隔的键:“值”对的串联。每个键都是一个非空字符串,由除空格 (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"`
    }
    

    【讨论】:

    【解决方案2】:

    感谢您接受的答案。

    以下内容仅供像我这样的懒人使用。

    不正确

    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"`
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多