func (j *JSON) Map(path ...string) map[string]*JSON {
	var data map[string]gjson.Result
	if len(path) == 0 || path[0] == "" {
		data = j.result.Map()
	} else {
		data = j.result.Get(path[0]).Map()
	}
	if len(data) == 0 {
		return nil
	}
	res := make(map[string]*JSON)
	for k, r := range data {
		res[k] = NewJSONwithResult(r)
	}
	return res
}
Map get map of JSON by path
package model
import "github.com/tidwall/gjson"
type JSON struct {
	data   []byte
	result gjson.Result
}
func NewJSON(data []byte) *JSON {
	j := &JSON{
		data:   data,
		result: gjson.Parse(string(data)),
	}
	return j
}
func NewJSONwithResult(res gjson.Result) *JSON {
	return &JSON{
		result: res,
	}
}
func (j *JSON) Get(path ...string) *JSON {
	var res gjson.Result
	if len(path) == 0 || path[0] == "" {
		res = j.result
	} else {
		res = j.result.Get(path[0])
	}
	return NewJSONwithResult(res)
}
func (j *JSON) String(path ...string) string {
	if len(path) == 0 || path[0] == "" {
		return j.result.String()
	}
	res := j.result.Get(path[0])
	if !res.Exists() {
		return ""
	}
	return res.String()
}
func (j *JSON) Int64(path ...string) int64 {
	if len(path) == 0 || path[0] == "" {
		return j.result.Int()
	}
	res := j.result.Get(path[0])
	if !res.Exists() {
		return 0
	}
	return res.Int()
}
func (j *JSON) Int32(path ...string) int32 {
	return int32(j.Int64(path...))
}
func (j *JSON) Int16(path ...string) int16 {
	return int16(j.Int64(path...))
}
func (j *JSON) Int8(path ...string) int8 {
	return int8(j.Int64(path...))
}
func (j *JSON) Int(path ...string) int {
	return int(j.Int64(path...))
}
func (j *JSON) Float64(path ...string) float64 {
	if len(path) == 0 || path[0] == "" {
		return j.result.Float()
	}
	res := j.result.Get(path[0])
	if !res.Exists() {
		return 0
	}
	return res.Float()
}
func (j *JSON) Float32(path ...string) float32 {
	return float32(j.Float64(path...))
}
func (j *JSON) Float(path ...string) float64 {
	return j.Float64(path...)
}
func (j *JSON) Bool(path ...string) bool {
	if len(path) == 0 || path[0] == "" {
		return j.result.Bool()
	}
	res := j.result.Get(path[0])
	if !res.Exists() {
		return false
	}
	return res.Bool()
}
func (j *JSON) Exist(path ...string) bool {
	if len(path) == 0 || path[0] == "" {
		return j.result.Exists()
	}
	return j.result.Get(path[0]).Exists()
}
func (j *JSON) Strings(path ...string) []string {
	var data []gjson.Result
	if len(path) == 0 || path[0] == "" {
		data = j.result.Array()
	} else {
		data = j.result.Get(path[0]).Array()
	}
	if len(data) == 0 {
		return nil
	}
	resData := make([]string, len(data))
	for i, r := range data {
		resData[i] = r.String()
	}
	return resData
}
func (j *JSON) Ints(path ...string) []int64 {
	var data []gjson.Result
	if len(path) == 0 || path[0] == "" {
		data = j.result.Array()
	} else {
		data = j.result.Get(path[0]).Array()
	}
	if len(data) == 0 {
		return nil
	}
	resData := make([]int64, len(data))
	for i, r := range data {
		resData[i] = r.Int()
	}
	return resData
}
func (j *JSON) Floats(path ...string) []float64 {
	var data []gjson.Result
	if len(path) == 0 || path[0] == "" {
		data = j.result.Array()
	} else {
		data = j.result.Get(path[0]).Array()
	}
	if len(data) == 0 {
		return nil
	}
	resData := make([]float64, len(data))
	for i, r := range data {
		resData[i] = r.Float()
	}
	return resData
}
func (j *JSON) Slice(path ...string) []*JSON {
	var data []gjson.Result
	if len(path) == 0 || path[0] == "" {
		data = j.result.Array()
	} else {
		data = j.result.Get(path[0]).Array()
	}
	if len(data) == 0 {
		return nil
	}
	resData := make([]*JSON, len(data))
	for i, r := range data {
		resData[i] = NewJSONwithResult(r)
	}
	return resData
}
func (j *JSON) Index(i int) *JSON {
	data := j.result.Array()
	if len(data) == 0 {
		return nil
	}
	if i >= len(data) || i < 0 {
		return nil
	}
	return NewJSONwithResult(data[i])
}