功能文档
json中显示了包解组到的默认类型
Unmarshal
bool, for JSON booleansfloat64, for JSON numbersstring, for JSON strings[]interface{}, for JSON arraysmap[string]interface{}, for JSON objectsnil for JSON null
由于您要编组为
interface{},因此返回的类型将仅来自该集合。该
json软件包不了解
Something1和
Something2。您需要从将
map[string]interface{}json对象解组为的转换,或者直接解组为所需的struct类型。
如果您不想从通用接口中解压缩数据,或者以某种方式标记数据以便知道期望的类型,则可以迭代地获取json并尝试将其解编为所需的每种类型。
您甚至可以将它们打包到包装结构中,为您进行拆封:
type Something1 struct { Thing string `json:"thing"` OtherThing int64 `json:"other_thing"`}type Something2 struct { Croc int `json:"croc"` Odile bool `json:"odile"`}type Unpacker struct { Data interface{}}func (u *Unpacker) UnmarshalJSON(b []byte) error { smth1 := &Something1{} err := json.Unmarshal(b, smth1) // no error, but we also need to make sure we unmarshaled something if err == nil && smth1.Thing != "" { u.Data = smth1 return nil } // abort if we have an error other than the wrong type if _, ok := err.(*json.UnmarshalTypeError); err != nil && !ok { return err } smth2 := &Something2{} err = json.Unmarshal(b, smth2) if err != nil { return err } u.Data = smth2 return nil}
http://play.golang.org/p/Trwd6IShDW
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)