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

ray*_*ray 9 json struct go

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

例子:

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

type Foo struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}
Run Code Online (Sandbox Code Playgroud)

然后我需要将标签更改nameemployee_name并省略age

type Bar struct {
    Name string `json:"employee_name"`
    Age  int    `json:"-"`
}
Run Code Online (Sandbox Code Playgroud)

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

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

type Foo struct {
    Name string `json:"name" json:"employee_name"`
    Age  int    `json:"age" json:"-"`
}        
Run Code Online (Sandbox Code Playgroud)

提前致谢。

icz*_*cza 5

这是不可能的。该encoding/json包仅处理json结构标签中的键。如果json多次列出该键(如您的示例中所示),则将使用第一次出现的键(这在 中实现StructTag.Get())。

请注意,这是包的实现限制encoding/json,而不是 Go 的实现限制。人们可以轻松创建一个类似的 JSON 编码包,支持多个标签键(例如json1, json2)或同一键的多次出现(如您的示例中所示)。


Jon*_*son 5

不过,对于 2 个布局相同的结构(namen、字段的类型和顺序需要完全匹配),可以从一个结构体转换为另一个结构体。不过,我会非常谨慎地这样做,并确保第二种类型(示例中的 bar)未导出,以防止在其他地方使用。

https://play.golang.org/p/y8EH1U9_3jN

  • 这对我处理来自两个不同来源的几乎相同的数据非常有帮助 - 谢谢 (2认同)