可以使用MarshalJSON将任意字段添加到golang中的json编码吗?

前端之家收集整理的这篇文章主要介绍了可以使用MarshalJSON将任意字段添加到golang中的json编码吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我写了下面的代码片段.那些倾斜的操场上的完整代码 here.
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输出添加一个字段,而不将其包含在“书”结构中.也许一个类型:

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

我可以使用MarshalJSON()向Marshal()上的JSON有效负载添加任意字段吗?就像是:

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

其他answers让我觉得这应该是可能的,但我正在努力弄清楚实现.

这是比以前更好的答案.
type FakeBook Book

func (b Book) MarshalJSON() ([]byte,error) {
    return json.Marshal(struct {
        FakeBook
        Genre string
    }{
        FakeBook: FakeBook(b),Genre:    "Satire",})
}

由于匿名结构字段被“合并”(有一些额外的注意事项),我们可以使用它来避免重映射单个字段.请注意使用FakeBook类型以避免否则会发生无限递归.

游乐场:http://play.golang.org/p/21YXhB6OyC

原文链接:https://www.f2er.com/go/186802.html

猜你在找的Go相关文章