1、json解析到map(通過類型斷言,找到值和value類型)
示例:
package main
import (
"encoding/json"
"fmt"
)
func main() {
jsonBuf := `
{
"company": "itcast",
"subjects": [
"Go",
"C++",
"Python",
"Test"
],
"isok": true,
"price": 666.666
}`
//創建一個map
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)
var str string
//類型斷言, 值,它是value類型
for key, value := range m {
//fmt.Printf("%v ============> %v\n", key, value)
switch data := value.(type) {
case string:
str = data
fmt.Printf("map[%s]的值類型為string, value = %s\n", key, str)
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)
}
}
}
執行結果:
m = map[isok:true price:666.666 company:itcast subjects:[Go C++ Python Test]] map[company]的值類型為string, value = itcast map[subjects]的值類型為[]interface, value = [Go C++ Python Test] map[isok]的值類型為bool, value = true map[price]的值類型為float64, value = 666.666000
