在Go中实现嵌入式结构的json marshaller

时间:2013-08-30 08:02:38

标签: json go

我有一个结构,我想有效地进行JSON编码:

type MyStruct struct {
    *Meta
    Contents []interface{}
}

type Meta struct {
    Id int
}

结构包含已知形式的元数据和未知形式的内容,内容列表在运行时填充,因此我实际上无法控制它们。为了提高Go的编组速度,我想在Meta结构上实现Marshaller接口。 Marshaller界面如下所示:

type Marshaler interface {
        MarshalJSON() ([]byte, error)
}

请记住,Meta结构并不像这里显示的那么简单。我尝试在Meta结构上实现Marshaler接口,但似乎当我接着JSON编组MyStruct时,结果只是Meta编组接口返回的结果。

所以我的问题是:我如何编组一个结构,包含带有自己的JSON编组器的嵌入式结构和没有结构的另一个结构?

1 个答案:

答案 0 :(得分:4)

由于匿名字段MarshalJSON的{​​{1}}方法将被提升为*Meta,因此当MyStruct将被编组时,MyStruct包将使用该方法。

您可以做的是,而不是让encoding/json实现Meta接口,您可以在MyStruct上实现这样的接口:

Marshaller
  

{ “ID”:42, “内容”:[ “MyForm的”,12]}

Playground