Предположим, что я написал следующий фрагмент кода. Полный код на игровой площадке здесь для тех, кто склонен.
type Book struct {
Title string
Author string
}
func main() {
ms := Book{"Catch-22", "Joseph Heller"}
out, err := json.MarshalIndent(ms, "", " ")
if err != nil {
log.Fatalln(err)
}
fmt.Println(string(out))
}
Этот код выводит следующее, точно так же, как я ожидал:
{
"Title": "Catch-22",
"Author": "Joseph Heller"
}
Предположим, что на какой-то момент я хотел добавить поле в вывод JSON, не включая его в структуру Book
. Возможно, жанр:
{
"Title": "Catch-22",
"Author": "Joseph Heller",
"Genre": "Satire"
}
Можно ли использовать MarshalJSON()
для добавления произвольного поля в полезную нагрузку JSON на Marshal()
? Что-то вроде:
func (b *Book) MarshalJSON() ([]byte, error) {
// some code
}
Другие ответы заставляют меня думать, что это должно быть возможно, но я изо всех сил пытаюсь понять реализацию.