gpt4 book ai didi

go - 使用反射使所有属性小写或大写?

转载 作者:IT王子 更新时间:2023-10-29 02:27:52 28 4
gpt4 key购买 nike

我从客户端接收到未知的 json,我解析为类似

的界面
var f interface{}
err := json.Unmarshal(b, &f)

如何让f中的所有键都变成小键?我必须将这个 f 保存到 mongo,我需要进行一些查询,但如果有人发送大写的相同 json,我想避免错误。

最佳答案

这是一种方法:

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 对象的键转换。

playground

如果您知道您正在使用一个没有嵌套的对象,那么您可以从 lower 内联 map case:

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

关于go - 使用反射使所有属性小写或大写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31321805/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com