- У меня есть 2
struct
, содержащее поле с той же меткой (id
) и той же аннотацией JSON (`json:" id "`). - Один
struct
(Bar
) включает в себя метки полей и их значения из других struct
(Foo
).
Я бы хотел, чтобы JSON назначил упаковщик struct
Bar
с обоими id
полей, но внутреннее с другой аннотацией JSON (например, `json:" foo_id "`).Я не могу найти способ сделать это, но похоже, что-то, что должно быть выполнимо?
Имея быстрый взгляд здесь https://golang.org/pkg/encoding/json/ Я не могу найти решение.
Это вообще возможно?Есть ли работа вокруг?Я пытаюсь избежать всей схемы получения / установки для копирования / вставки значений между структурами, я надеюсь, что это как-то выполнимо.
package main
import (
"encoding/json"
"fmt"
)
type Foo struct {
ID int `json:"id"`
Stuff string `json:"stuff"`
}
type Bar struct {
ID int `json:"id"`
Foo
// the following does not work,
// I've tried a few variations with no luck so far
// Foo.ID int `json:"foo_id"`
OtherStuff string `json:"other_stuff"`
}
func main() {
foo := Foo{ID: 123, Stuff: "abc" }
bar := Bar{ID: 456, OtherStuff: "xyz", Foo: foo }
fooJsonStr, _ := json.Marshal(foo)
barJsonStr, _ := json.Marshal(bar)
fmt.Printf("Foo: %s\n", fooJsonStr)
fmt.Printf("Bar: %s\n", barJsonStr)
}
Дает этот вывод:
Foo: {"id":123,"stuff":"abc"}
Bar: {"id":456,"stuff":"abc","other_stuff":"xyz"}