是否可以使用包含多个JSON标记的结构?

时间:2016-05-09 14:23:58

标签: json go struct

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

示例:

在下面的代码中,我从服务器获取{"name":"Sam","age":20}并将其解组为结构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:"-"`
}        

提前致谢。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

但是,使用2个布局完全相同的结构(namin,字段的类型和顺序需要完全匹配)的情况可能会从一个转换为另一个。不过,我会非常谨慎,并确保未导出第二种类型(您示例中的条形),以防止在其他地方使用。

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