go json 解析到 map 类型

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 相对而已比较复杂,还需要通过类型 断言 的方式先把类型判断出来才能使用.这点是比较坑的.

猜你喜欢

转载自blog.csdn.net/cpongo6/article/details/89249254