package utils

import (
	"bytes"
	"encoding/json"
	"regexp"
)

func JsonMarshal(interface{}) {

}

// 不科学计数法
func JsonDecode(data []byte, v interface{}) error {
	d := json.NewDecoder(bytes.NewReader(data))
	d.UseNumber()
	return d.Decode(v)
}

// json字符串驼峰命名格式 转为 下划线命名格式
// 	c :json字符串
func MarshalJSONCamelCase2JsonSnakeCase(c string) []byte {
	// Regexp definitions
	var keyMatchRegex = regexp.MustCompile(`\"(\w+)\":`)
	var wordBarrierRegex = regexp.MustCompile(`(\w)([A-Z])`)
	marshalled := []byte(c)
	converted := keyMatchRegex.ReplaceAllFunc(
		marshalled,
		func(match []byte) []byte {
			return bytes.ToLower(wordBarrierRegex.ReplaceAll(
				match,
				[]byte(`${1}_${2}`),
			))
		},
	)
	return converted
}