我从客户端收到未知的json,我解析为接口,如
var f interface{}
err := json.Unmarshal(b, &f)
如何使f中的所有键都为低键? 我必须将此f保存到mongo并且我需要进行一些查询但是我想避免错误,如果有人发送大写相同的json。
答案 0 :(得分:3)
它将是map[string]interface{}
所以请仔细检查并简单地将密钥转换为小写。
var f map[string]interface{}
...
converted := make(map[string]interface{}, len(f))
for k, v := range f {
converted[strings.ToLower(k)] = v
}
答案 1 :(得分:2)
以下是一种方法:
var f interface{}
err := json.Unmarshal(b, &f)
f = lower(f)
低位是:
func lower(f interface{}) interface{} {
switch f := f.(type) {
case []interface{}:
for i := range f {
f[i] = lower(f[i])
}
return f
case map[string]interface{}:
lf := make(map[string]interface{}, len(f))
for k, v := range f {
lf[strings.ToLower(k)] = lower(v)
}
return lf
default:
return f
}
}
函数lower
是递归的,用于处理嵌套JSON对象的密钥转换。
如果您知道自己正在使用没有嵌套的对象,那么可以从lower
内联地图案例:
var f map[string]interface{}
err := json.Unmarshal(b, &f)
lf := make(map[string]interface{}, len(f))
for k, v := range f {
lf[strings.ToLower(k)] = v
}
f = lf