go - Make all properties lower case or upper case using reflect? -


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.

playground

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