douyue2313 2017-07-07 12:40
浏览 193

获取值形式嵌套地图类型map [string] interface {}

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?

  • 写回答

2条回答 默认 最新

  • doushuichong2589 2017-07-07 15:30
    关注

    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
    }
    

    Go Playground

    评论

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看