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