使用反射使所有属性小写还是大写?

我从客户端收到未知的 json 并且我解析为接口


var f interface{}

err := json.Unmarshal(b, &f)

如何使 f 中的所有键都成为较低的键?我必须将此 f 保存到 mongo,我需要进行一些查询,但如果有人发送大写相同的 json,我想避免出错。


MM们
浏览 172回答 2
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

慕码人2483693

将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}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go