英文:
get value form nested map type map[string]interface{}
问题
我正在尝试从嵌套的映射中获取所有的值,但我不知道该如何做到这一点。
package main
import "fmt"
func main() {
m := map[string]interface{}{
"date": "created",
"clientName": "data.user.name",
"address": map[string]interface{}{
"street": "x.address",
},
"other": map[string]interface{}{
"google": map[string]interface{}{
"value": map[string]interface{}{
"x": "y.address",
},
},
},
"new_address": map[string]interface{}{
"address": "z.address",
},
}
for i := range m {
fmt.Println(m[i])
// 如何从其他嵌套映射中获取值?
}
}
如何从其他嵌套映射中获取值?
英文:
I'm trying to get all value from nested map and, I don't know how I can do that.
package main
import "fmt"
func main() {
m := map[string]interface{}{
"date": "created",
"clientName": "data.user.name",
"address": map[string]interface{}{
"street": "x.address",
},
"other": map[string]interface{}{
"google": map[string]interface{}{
"value": map[string]interface{}{
"x": "y.address",
},
},
},
"new_address": map[string]interface{}{
"address": "z.address",
},
}
for i := range m {
fmt.Println(m[i])
// how I can get value from other nested map?
}
}
how I can get value from other nested map?
答案1
得分: 7
你应该使用非恐慌式转换来针对目标值。
for i := range m {
nestedMap, ok := m[i].(map[string]interface{})
if ok {
// 做你想做的事情
}
}
更多详情请参考:https://golang.org/ref/spec#Type_assertions
英文:
You should use nonpanic casting to target value.
for i := range m {
nestedMap, ok := m[i].(map[string]interface{})
if ok {
// Do what you want
}
}
More details: https://golang.org/ref/spec#Type_assertions
答案2
得分: 4
受@BayRinat答案的启发
package main
import "fmt"
func main() {
m := map[string]interface{}{
"date": "created",
"clientName": "data.user.name",
"address": map[string]interface{}{
"street": "x.address",
},
"other": map[string]interface{}{
"google": map[string]interface{}{
"value": map[string]interface{}{
"x": "g.address",
},
},
},
"new_address": map[string]interface{}{
"address": "z.address",
},
"key1": map[string]interface{}{
"key2": map[string]interface{}{
"key3": map[string]interface{}{
"key4": map[string]interface{}{
"key5": map[string]interface{}{
"key6": map[string]interface{}{
"key7": map[string]interface{}{
"key": "enough",
},
},
},
},
},
},
},
}
for i := range m {
nestedMap, ok := m[i].(map[string]interface{})
if ok {
fmt.Println("Key:", i)
fmt.Println("Value:", getValNestedMap(nestedMap))
} else {
fmt.Println("Key:", i)
fmt.Println("Value:", m[i])
}
}
}
func getValNestedMap(m map[string]interface{}) interface{} {
for i := range m {
nestedMap, ok := m[i].(map[string]interface{})
if ok {
return getValNestedMap(nestedMap)
}
return m[i]
}
return nil
}
参考链接:答案
英文:
Inspired by @BayRinat answer
package main
import "fmt"
func main() {
m := map[string]interface{}{
"date": "created",
"clientName": "data.user.name",
"address": map[string]interface{}{
"street": "x.address",
},
"other": map[string]interface{}{
"google": map[string]interface{}{
"value": map[string]interface{}{
"x": "g.address",
},
},
},
"new_address": map[string]interface{}{
"address": "z.address",
},
"key1": map[string]interface{}{
"key2": map[string]interface{}{
"key3": map[string]interface{}{
"key4": map[string]interface{}{
"key5": map[string]interface{}{
"key6": map[string]interface{}{
"key7": map[string]interface{}{
"key": "enough",
},
},
},
},
},
},
},
}
for i := range m {
nestedMap, ok := m[i].(map[string]interface{})
if ok {
fmt.Println("Key:", i)
fmt.Println("Value:", getValNestedMap(nestedMap))
} else {
fmt.Println("Key:", i)
fmt.Println("Value:", m[i])
}
}
}
func getValNestedMap(m map[string]interface{}) interface{} {
for i := range m {
nestedMap, ok := m[i].(map[string]interface{})
if ok {
return getValNestedMap(nestedMap)
}
return m[i]
}
return nil
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论