更新。
interface会自动很好地编码和解码为JSON。如果您希望控制类型,则可以添加特殊字符
UnmarshalJSON并在其中进行检查:
type TheParam interface{}type MyData struct { Name string `json:"name"` Value int32 `json:"value"` Param TheParam `json:"param"`}type myData MyDatafunc (m *MyData) UnmarshalJSON(b []byte) error { var mm myData if err := json.Unmarshal(b, &mm); err != nil { return err } switch mm.Param.(type) { case float64, string, map[string]interface{}: *m = MyData(mm) return nil default: return InvalidFieldTypeError{value: mm.Param} } return nil}类型
InvalidFieldTypeError可能方便返回此类错误,并且可以将其定义为:
type InvalidFieldTypeError struct { value interface{}}func (e InvalidFieldTypeError) Error() string { return fmt.Sprintf("Field type '%T' is not valid for MyData", e.value)}整个示例:https://play.golang.org/p/MuW6gwSAKi
我也想推荐这篇文章https://attilaolah.eu/2013/11/29/json-decoding-in-
go/



