猿问

是否可以有一个带有多个 JSON 标签的结构?

我向服务器发布请求并获得 JSON 格式的回复。我能够将其解组为结构。然后我需要创建一个新的 JSON 文件,它具有相同的数据但不同的 JSON 标签。


例子:


在以下代码中,我{"name":"Sam","age":20}从服务器获取并将其解组到 struct Foo:


type Foo struct {

    Name string `json:"name"`

    Age  int    `json:"age"`

}

然后我需要将标签更改name为employee_name并省略age:


type Bar struct {

    Name string `json:"employee_name"`

    Age  int    `json:"-"`

}

之后,我将此修改后的数据发送到另一台服务器。


我知道我可以创建一个新的Bar并将所有数据复制到其中,但是有很多字段。我想知道是否有办法像这样附加多个 JSON 标签:


type Foo struct {

    Name string `json:"name" json:"employee_name"`

    Age  int    `json:"age" json:"-"`

}        

提前致谢。


森林海
浏览 250回答 2
2回答

慕运维8079593

这是不可能的。该encoding/json包仅处理json结构标记中的键。如果json键被多次列出(如您的示例中),将使用第一次出现(这在 中实现StructTag.Get())。请注意,这是encoding/json包的实现限制,而不是 Go 的限制。可以轻松创建一个类似的 JSON 编码包,支持多个标签键(例如json1, json2)或同一键的多次出现(如您的示例中所示)。

茅侃侃

但是,对于 2 个布局相同的结构(字段的名称、类型和顺序需要完全匹配),有可能从一个转换到另一个。不过,我会非常谨慎地这样做,并确保未导出第二种类型(在您的示例中为 bar)以防止在其他地方使用。https://play.golang.org/p/y8EH1U9_3jN
随时随地看视频慕课网APP

相关分类

Go
我要回答