我想反序列化包含某个接口数组的对象Entity:
type Result struct {
Foo int;
Bar []Entity;
};
Run Code Online (Sandbox Code Playgroud)
Entity是一个由许多结构类型实现的接口.JSON数据标识每个实体中具有"类型"字段的结构类型.例如
{"type":"t1","field1":1}
{"type":"t2","field2":2,"field3":3}
Run Code Online (Sandbox Code Playgroud)
我将如何以Result正确填充数组的方式对类型进行反序列化.从我所看到的,我必须:
UnmarshalJSON上Result.Bar为[]*json.RawMessage.map[string]interface{}.这一切听起来都很乏味和无聊.有一个更好的方法吗?或者我是否向后做,并且有一种更规范的方法来处理异构对象的数组?
我认为你的过程可能比它要复杂得多,请参阅http://play.golang.org/p/0gahcMpuQc.单个map [string] interface {}将为您处理大量内容.
或者,您可以制作类似的类型
struct EntityUnion {
Type string
// Fields from t1
// Fields from t2
// ...
}
Run Code Online (Sandbox Code Playgroud)
解散; 它将设置Type字符串并填写它可以从JSON数据中获取的所有字段.然后,您只需要一个小函数将字段复制到特定类型.