package main
import (
"fmt""encoding/json"
)
func main() {
var m map[string]interface{} //声明变量,不分配内存
m = make(map[string]interface{}) //必可不少,分配内存
m["name"] = "simon"var age int = 12
m["age"] = age
m["addr"] = "China"
print_map(m)
fmt.Println()
data, err:=json.Marshal(m)
fmt.Println("err:", err)
fmt.Println(data)
fmt.Println()
m1 := make(map[string]interface{})
err = json.Unmarshal(data, &m1)
fmt.Println("err:", err)
fmt.Println(m1)
print_map(m1)
fmt.Println()
if m1["name"]!= nil {
fmt.Println(m1["name"].(string))
}
if m1["type"]!= nil {
fmt.Println(m1["type"].(string))
} else {
fmt.Println("there is not the key of type")
}
}
//解析 map[string]interface{} 数据格式func print_map(m map[string]interface{}) {
for k, v := range m {
switch value := v.(type) {
casenil:
fmt.Println(k, "is nil", "null")
casestring:
fmt.Println(k, "is string", value)
caseint:
fmt.Println(k, "is int", value)
casefloat64:
fmt.Println(k, "is float64", value)
case []interface{}:
fmt.Println(k, "is an array:")
for i, u := range value {
fmt.Println(i, u)
}
casemap[string]interface{}:
fmt.Println(k, "is an map:")
print_map(value)
default:
fmt.Println(k, "is unknown type", fmt.Sprintf("%T", v))
}
}
}
运行结果
nameisstring simon
age is int 12
addr isstring China
err: <nil>
[12334971001001143458346710410511097344434971031013458495044341109710910134583411510510911111034125]
err: <nil>
map[addr:China age:12name:simon]
nameisstring simon
addr isstring China
age is float64 12
simon
there isnotthe key of type
Process finished withexit code 0
注意事项map记得分配内存解析出来的int类型会变成float64类型注意判断不为nil后再转换类型package mainimport ( "fmt" "encoding/json")func main() { var m map[string]interface{} //声明变量,不分配内存 m = make(map[stri...