假设我有以下几种类型:
type Inner struct {
Field1 string `json:"field1"`
Field2 string `json:"field2"`
}
type Outer struct {
Inner
Field2 string `json:"-"`
}
我要完成的工作是允许一种类型(
Outer
)包含嵌入式类型(Inner
)中的所有字段,但是覆盖其中的一个字段,以使其不会在JSON中编码。这不起作用,并且调用json.Marshal(Outer{})
返回:{"field1":"","field2":""}
Go中有什么方法可以代替它吗?
{"field1":""}
最佳答案
您可以执行类似this的操作(关键是输出标签具有相同的名称):
type Inner struct {
Field1 string `json:"field1"`
Field2 string `json:"field2"`
}
type Outer struct {
Inner
NameDoesNotMatter string `json:"field2,omitempty"`
}
func main() {
j, err := json.Marshal(Outer{})
if err != nil {
panic(err)
}
fmt.Printf("1: %s\n", j)
v := Inner{
Field1: "foo",
Field2: "bar",
}
j, err = json.Marshal(Outer{Inner: v})
if err != nil {
panic(err)
}
fmt.Printf("2: %s\n", j)
}
输出:
1: {"field1":""}
2: {"field1":"foo"}
在研究如何使用结构组成来操作JSON输出时,我发现this article非常有用。
关于json - Golang-覆盖嵌入式字段的JSON标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60083914/