Kann ich mit MarshalJSON beliebige Felder zu einer JSON-Codierung in Golang hinzufügen?

Angenommen, ich habe den folgenden Codeausschnitt geschrieben. Voller Code auf dem SpielplatzHier für die geneigten.

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))
}

Dieser Code gibt genau wie erwartet Folgendes aus:

{
  "Title": "Catch-22",
  "Author": "Joseph Heller"
}

Angenommen, ich wollte für einen Moment ein Feld zur JSON-Ausgabe hinzufügen, ohne es in die JSON-Ausgabe aufzunehmenBook struct. Vielleicht ein Genre:

{
  "Title": "Catch-22",
  "Author": "Joseph Heller",
  "Genre": "Satire"
}

Kann ich benutzenMarshalJSON() um der JSON-Nutzlast ein beliebiges Feld hinzuzufügenMarshal()? So etwas wie:

func (b *Book) MarshalJSON() ([]byte, error) {
    // some code
}

AndereAntworten Ich denke, das sollte möglich sein, aber ich habe Mühe, die Implementierung herauszufinden.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage