Remember that the biggest advantage you get from using a map[string]interface{} map, or any map that stores an interface{} value in general, is that you still have your data in its original state and data type.
Nowadays, web services work by exchanging JSON records. If you get a JSON record in an anticipated format, then you can process it as expected and everything will be fine. However, there are times when you might get an erroneous record or a record in an unsupported JSON format. In these cases, using map[string]interface{} for storing these unknown JSON records (arbitrary data) is a good choice because map[string]interface{} is good at storing JSON records of unknown types.
package main import ( "encoding/json" "fmt" "os" ) var JSONrecord = `{ "Flag": true, "Array": ["a","b","c"], "Entity": { "a1": "b1", "a2": "b2", "Value": -456, "Null": null }, "Message": "Hello Go!" }` func typeSwitch(m map[string]interface{}) { for k, v := range m { switch c := v.(type) { case string: fmt.Println("Is a string!", k, c) case float64: fmt.Println("Is a float64!", k, c) case bool: fmt.Println("Is a Boolean!", k, c) case map[string]interface{}: fmt.Println("Is a map!", k, c) typeSwitch(v.(map[string]interface{})) default: fmt.Printf("...Is %v: %T!\n", k, c) } } } func exploreMap(m map[string]interface{}) { for k, v := range m { embMap, ok := v.(map[string]interface{}) // If it is a map, explore deeper if ok { fmt.Printf("{\"%v\": \n", k) exploreMap(embMap) fmt.Printf("}\n") } else { fmt.Printf("%v: %v\n", k, v) } } } func main() { if len(os.Args) == 1 { fmt.Println("*** Using default JSON record.") } else { JSONrecord = os.Args[1] } JSONMap := make(map[string]interface{}) err := json.Unmarshal([]byte(JSONrecord), &JSONMap) if err != nil { fmt.Println(err) return } exploreMap(JSONMap) fmt.Println("------------------------------------------------") typeSwitch(JSONMap) }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律