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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值