Posso usar MarshalJSON para adicionar campos arbitrários a uma codificação json em golang?
Suponha que eu escrevi o seguinte trecho de código. Código completo no parquinhoaqui para aqueles 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))
}
Esse código gera o seguinte, exatamente como eu esperava:
{
"Title": "Catch-22",
"Author": "Joseph Heller"
}
Suponha que, por um momento, eu queira adicionar um campo à saída JSON sem incluí-lo noBook
struct. Talvez um gênero:
{
"Title": "Catch-22",
"Author": "Joseph Heller",
"Genre": "Satire"
}
Eu posso usarMarshalJSON()
para adicionar um campo arbitrário à carga útil JSON emMarshal()
? Algo como:
func (b *Book) MarshalJSON() ([]byte, error) {
// some code
}
De outrosrespostas faça-me pensar que isso deveria ser possível, mas estou lutando para descobrir a implementação.