Golang - переопределить JSON тег встроенного поля - PullRequest
0 голосов
/ 05 февраля 2020

Допустим, у меня есть следующие типы:

type Inner struct {
    Field1 string `json:"field1"`
    Field2 string `json:"field2"`
}

type Outer struct {
    Inner 
    Field2 string `json:"-"`
}

То, что я пытаюсь выполнить sh, это разрешить иметь тип (Outer), который включает все поля в встроенный тип (Inner), но переопределяет одно из полей, чтобы его нельзя было маршалировать в JSON. Это не работает, и вызов json.Marshal(Outer{}) возвращает:

{"field1":"","field2":""}

Есть ли способ сделать это в Go, который вместо этого вернет это?

{"field1":""}

1 Ответ

1 голос
/ 06 февраля 2020

Вы можете сделать что-то вроде 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"}

I найдена эта статья очень полезна при изучении того, как манипулировать выводом JSON с использованием структуры struct.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...