package main
import (
"encoding/json"
"fmt"
)
type City struct {
City string `json:"City"`
Size int `json:"Size"`
}
type Location struct {
City City
State string `json:"State"`
}
func main() {
city := City{City: "San Francisco", Size: 8700000}
loc := Location{}
loc.State = "California"
loc.City = city
js, _ := json.Marshal(loc)
fmt.Printf("%s", js)
}
Выводит следующее:
{"City":{"City":"San Francisco","Size":8700000},"State":"California"}
Предполагаемый вывод, который мне нужен:
{"City":"San Francisco","Size":8700000,"State":"California"}
Я прочитал сообщение в блоге для пользовательскихJSON Marshalling, но я не могу заставить его работать для структуры с другой встроенной структурой.
Я попытался сгладить структуру, определив пользовательскую функцию MarshalJSON
, но все равно получаю тот же вложенный вывод:
func (l *Location) MarshalJSON() ([]byte, error) {
return json.Marshal(&struct {
City string `json:"City"`
Size int `json:"Size"`
State string `json:"State"`
}{
City: l.City.City,
Size: l.City.Size,
State: l.State,
})
}