json - Golang-覆盖嵌入式字段的JSON标签

标签 json go struct

假设我有以下几种类型:

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/

相关文章:

java - 为什么 Java 不支持结构体? (纯属好奇)

C++ std::指向结构的指针列表

json - Node.JS/Express 在 JSON 中存储不同环境的数据库配置

c# - WebAPI 返回没有根节点的 JSON 数组

go - 添加vue http header时出错

go - Golang Getopt V2:解析多个重复的标志

c - 在 Rust 中使用类似 C 的结构数组

.net - 这似乎是 .NET 的 JavaScript 反序列化中的一个错误……是吗?

json - 变量名可以与 json 不同吗?

go - 学习围棋——范围