i receiving unknown json client , parse interface
var f interface{} err := json.unmarshal(b, &f) how make keys in f lower keys ? have save f mongo , need make queries want avoid mistake if send uppercase same json.
here's 1 way it:
var f interface{} err := json.unmarshal(b, &f) f = lower(f) where lower is:
func lower(f interface{}) interface{} { switch f := f.(type) { case []interface{}: := range f { f[i] = lower(f[i]) } return f case map[string]interface{}: lf := make(map[string]interface{}, len(f)) k, v := range f { lf[strings.tolower(k)] = v } return lf default: return f } } the function lower recursive handle key conversion nested json objects.
if know working object without nesting, can inline map case lower:
var f map[string]interface{} err := json.unmarshal(b, &f) lf := make(map[string]interface{}, len(f)) k, v := range f { lf[strings.tolower(k)] = v } f = lf
Comments
Post a Comment