我有以下的
JSON
{"a":1,"b":2,"?":1,"??":1}
我知道它有“a”和“b”字段,但我不知道其他字段的名称.所以我想解散它在以下类型:
type Foo struct { A int `json:"a"` B int `json:"b"` X map[string]interface{} `json:???` // Rest of the fields should go here. }
我怎么做?
解决方法
这不是很好,但你可以通过实施Unmarshaler:
type _Foo Foo func (f *Foo) UnmarshalJSON(bs []byte) (err error) { foo := _Foo{} if err = json.Unmarshal(bs,&foo); err == nil { *f = Foo(foo) } m := make(map[string]interface{}) if err = json.Unmarshal(bs,&m); err == nil { delete(m,"a") delete(m,"b") f.X = m } return err }
类型_Foo是必要的,以避免解码时的递归.