package main
import (
"encoding/json"
"fmt"
)
func main() {
jsonBuf := `
{
"company": "itcast",
"subjects": [
"Go",
"C++",
"Python",
"Test"
],
"isok": true,
"price": 666.666
}`
//创建一个 map 用于存放 json 数据
m := make(map[string]interface{},4)
err := json.Unmarshal([]byte(jsonBuf),&m) //第二个参数要地址传递
if err != nil{
fmt.Println("err = ", err)
return
}
fmt.Printf("m = %+v\n", m)
for key,value := range m{
fmt.Printf("%v ============> %v\n", key, value)
fmt.Printf("key type ===> %T\n value type ===>%T\n", key, value)
switch data:= value.(type) {
case string:
fmt.Printf("map[%s]的值类型为string, value = %s\n", key, data)
case bool:
fmt.Printf("map[%s]的值类型为bool, value = %v\n", key, data)
case float64:
fmt.Printf("map[%s]的值类型为float64, value = %f\n", key, data)
case []string:
fmt.Printf("map[%s]的值类型为[]string, value = %v\n", key, data)
case []interface{}:
fmt.Printf("map[%s]的值类型为[]interface, value = %v\n", key, data)
}
}
}
相比前面的 json
解析到结构体,解析到 map
相对而已比较复杂,还需要通过类型 断言
的方式先把类型判断出来才能使用.这点是比较坑的.