func Unmarshal(data []byte, v interface{}) error {
	switch v := v.(type) {
	case *map[string]interface{}:
		decoder := json.NewDecoder(bytes.NewBuffer(data))
		decoder.UseNumber()
		if err := decoder.Decode(v); err != nil {
			return err
		}
		return convertMapNumbers(*v)
	case *[]interface{}:
		decoder := json.NewDecoder(bytes.NewBuffer(data))
		decoder.UseNumber()
		if err := decoder.Decode(v); err != nil {
			return err
		}
		return convertSliceNumbers(*v)
	default:
		return json.Unmarshal(data, v)
	}
}
Unmarshal unmarshals the given data
If v is a *map[string]interface{}, numbers are converted to int64 or float64
package json
import (
	"bytes"
	"encoding/json"
	"io"
)
func NewEncoder(w io.Writer) *json.Encoder {
	return json.NewEncoder(w)
}
func Marshal(v interface{}) ([]byte, error) {
	return json.Marshal(v)
}