diff --git a/simplejson_go10.go b/simplejson_go10.go index c9151e9..39b9077 100644 --- a/simplejson_go10.go +++ b/simplejson_go10.go @@ -22,6 +22,15 @@ func (j *Json) UnmarshalJSON(p []byte) error { return json.Unmarshal(p, &j.data) } +// To unmarshal *Json into an interface value +func (j *Json) Unmarshal(val interface{}) error { + p, err := j.Encode() + if err != nil { + return err + } + return json.Unmarshal(p, val) +} + // Float64 coerces into a float64 func (j *Json) Float64() (float64, error) { switch j.data.(type) { diff --git a/simplejson_go11.go b/simplejson_go11.go index 1c47953..82b8469 100644 --- a/simplejson_go11.go +++ b/simplejson_go11.go @@ -18,6 +18,17 @@ func (j *Json) UnmarshalJSON(p []byte) error { return dec.Decode(&j.data) } +// To unmarshal *Json into an interface value +func (j *Json) Unmarshal(val interface{}) error { + p, err := j.Encode() + if err != nil { + return err + } + dec := json.NewDecoder(bytes.NewBuffer(p)) + dec.UseNumber() + return dec.Decode(val) +} + // NewFromReader returns a *Json by decoding from an io.Reader func NewFromReader(r io.Reader) (*Json, error) { j := new(Json)