可以使用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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |