golang 利用反射获取map[string]interface{}的key,key中有key
时间: 2023-12-13 17:02:56 浏览: 227
如果你想获取嵌套在`map[string]interface{}`中的嵌套key,可以使用递归来实现。可以先判断当前`Value`是否为`map[string]interface{}`类型,如果是,则遍历map中的key,如果key的值是`map[string]interface{}`类型,则递归调用当前函数。示例代码如下:
```go
import "reflect"
func GetMapKeys(m map[string]interface{}) []string {
keys := make([]string, 0, len(m))
v := reflect.ValueOf(m)
for _, key := range v.MapKeys() {
if subMap, ok := key.Interface().(map[string]interface{}); ok {
subKeys := GetMapKeys(subMap)
for _, subKey := range subKeys {
keys = append(keys, key.String()+"."+subKey)
}
} else {
keys = append(keys, key.String())
}
}
return keys
}
```
这个函数会返回一个字符串切片,包含传入的`map[string]interface{}`中的所有key,包括嵌套的key。例如,如果传入的`map[string]interface{}`中有一个key叫做`"a"`,它的值是一个`map[string]interface{}`,其中有一个key叫做`"b"`,那么函数返回的字符串切片中将包含一个元素`"a.b"`。
阅读全文