Recursion 使用递归在go中获取深度嵌套结构
我需要解析从深度嵌套的JSON对象读取的接口。我使用下面的递归函数来获取大部分数组Recursion 使用递归在go中获取深度嵌套结构,recursion,go,types,Recursion,Go,Types,我需要解析从深度嵌套的JSON对象读取的接口。我使用下面的递归函数来获取大部分数组 func arrayReturn(m map[string]interface{}) []interface{} { for _, v:= range m { if v.(type) == map[string]interface{} { return arrayReturn(v.(map[string]interface{})) }
func arrayReturn(m map[string]interface{}) []interface{} {
for _, v:= range m {
if v.(type) == map[string]interface{} {
return arrayReturn(v.(map[string]interface{}))
}
if v.(type) == string {
return v.([]interface{})
}
}
}
这为返回
行提供了此错误:
syntax error: unexpected return, expecting expression
“期待表达”是什么意思 此语法:
if v.(type) == map[string]interface{} { /* ... */ }
这是无效的。不能与类型进行比较,只能与值进行比较
您想要的可以使用a解决,其中案例确实是类型:
func arrayReturn(m map[string]interface{}) []interface{} {
for _, v := range m {
switch v2 := v.(type) {
case map[string]interface{}:
return arrayReturn(v2) // v2 is of type map[string]interface{}
case []interface{}:
return v2 // v2 is of type []interface{}
}
}
return nil
}
还请注意,如果在开关
关键字之后使用短变量声明,则在每个案例
中使用的变量类型将是您在案例
中指定的,因此不需要进一步的类型断言 此语法:
if v.(type) == map[string]interface{} { /* ... */ }
这是无效的。不能与类型进行比较,只能与值进行比较
您想要的可以使用a解决,其中案例确实是类型:
func arrayReturn(m map[string]interface{}) []interface{} {
for _, v := range m {
switch v2 := v.(type) {
case map[string]interface{}:
return arrayReturn(v2) // v2 is of type map[string]interface{}
case []interface{}:
return v2 // v2 is of type []interface{}
}
}
return nil
}
还请注意,如果在开关
关键字之后使用短变量声明,则在每个案例
中使用的变量类型将是您在案例
中指定的,因此不需要进一步的类型断言