¿Puedo usar MarshalJSON para agregar campos arbitrarios a una codificación json en golang?
Supongamos que he escrito el siguiente fragmento de código. Código completo en el patio de recreoaquí para los inclinados
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))
}
Este código genera lo siguiente, exactamente como esperaba:
{
"Title": "Catch-22",
"Author": "Joseph Heller"
}
Supongamos por un momento que quisiera agregar un campo a la salida JSON sin incluirlo en elBook
estructura Quizás un género:
{
"Title": "Catch-22",
"Author": "Joseph Heller",
"Genre": "Satire"
}
Puedo usarMarshalJSON()
para agregar un campo arbitrario a la carga útil JSON enMarshal()
? Algo como:
func (b *Book) MarshalJSON() ([]byte, error) {
// some code
}
Otrorespuestas me hace pensar que esto debería ser posible, pero estoy luchando por descubrir la implementación.