假设我有以下类型:
type Inner struct {
Field1 string `json:"field1"`
Field2 string `json:"field2"`
}
type Outer struct {
Inner
Field2 string `json:"-"`
}
Run Code Online (Sandbox Code Playgroud)
我试图通过此实现的目的是允许拥有一种类型 ( Outer),该类型 ( ) 包含嵌入类型 ( ) 中的所有字段Inner,但覆盖其中一个字段,使其不被编组到 JSON 中。这不起作用,调用json.Marshal(Outer{})返回:
{"field1":"","field2":""}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以在 Go 中执行此操作并返回此值吗?
{"field1":""}
Run Code Online (Sandbox Code Playgroud)
你可以这样做(关键是输出标签具有相同的名称):
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)
}
Run Code Online (Sandbox Code Playgroud)
输出:
1: {"field1":""}
2: {"field1":"foo"}
Run Code Online (Sandbox Code Playgroud)
在研究如何使用结构组合操作 JSON 输出时,我发现这篇文章非常有用。
| 归档时间: |
|
| 查看次数: |
2382 次 |
| 最近记录: |