我向服务器发布请求并以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:"-"`
}
提前致谢。
答案 0 :(得分:2)
这是不可能的。 encoding/json
包仅处理struct标记中的json
键。如果多次列出json
键(如您的示例所示),则将使用第一个匹配项(这在StructTag.Get()
中实现)。
请注意,这是encoding/json
包的实施限制,而不是Go的实施限制。可以轻松创建一个类似的JSON编码包,支持多个标记键(例如json1
,json2
)或多次出现的相同键(如示例所示)。
答案 1 :(得分:0)
但是,使用2个布局完全相同的结构(namin,字段的类型和顺序需要完全匹配)的情况可能会从一个转换为另一个。不过,我会非常谨慎,并确保未导出第二种类型(您示例中的条形),以防止在其他地方使用。