加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 19:29:15 所属栏目:大数据 来源:网络整理
导读:假设我写了下面的代码片段.那些倾斜的操场上的完整代码 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.Pr
假设我写了下面的代码片段.那些倾斜的操场上的完整代码 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读