首页 > 解决方案 > 如何将嵌套接口转换为地图切片的地图?

问题描述

我有一个 map 数组的 map map[string][]map[string]string,只是,当我获取数据时,它是 format map[interface{}]map[interface{}][]map[interface{}]interface{},所以我要做一堆嵌套类型断言,这真的很笨重,需要很长时间才能编写,很难读/写,并且可能容易出错,像这样;

        if key == "identities" {
            idErrMessage := "Sorry, there was a problem with an identity"
            idArray, ok := setting.(map[string]interface{})
            if ok {
                for idType, ids := range idArray {
                    idGroupArray, ok := ids.([]interface{})
                    if ok {
                        for _, idGroup := range idGroupArray {
                            id, ok := idGroup.(map[interface{}]interface{})
                            if ok {
                                log.Println("type:", idType)
                                for key, val := range id {
                                    log.Printf("%v: %v", key, val)
                                }
                            } else {
                                log.Fatal(idErrMessage)
                            }
                        }
                    } else {
                        log.Fatal(idErrMessage)
                    }
                }
            } else {
                log.Fatal(idErrMessage)
            }
        }

我已经搜索了几个小时,似乎找不到比上面的代码更简单的方法。

无论如何我可以v, ok := setting.(map[string]map[string][]map[string]string),还是我只是坚持上面的代码?

标签: go

解决方案


您可以使用预期的结构定义一个结构,并尝试使用以下内容对其进行解组:

https://github.com/mitchellh/mapstructure

我从来没有用 map[interface{}]interface{} 尝试过。


推荐阅读