go语言解析 map[string]interface{} 数据格式

注意事项
map记得分配内存
解析出来的int类型会变成float64类型
注意判断不为nil后再转换类型
package main

import (
    "fmt"
    "encoding/json"
)

func main() {
    var m map[string]interface{}    //声明变量,不分配内存
    m = make(map[string]interface{}) //必可不少,分配内存
    m["name"] = "simon"
    var age int = 12
    m["age"] = age
    m["addr"] = "China"
    print_map(m)
    fmt.Println()

    data, err:=json.Marshal(m)
    fmt.Println("err:", err)
    fmt.Println(data)
    fmt.Println()

    m1 := make(map[string]interface{})
    err = json.Unmarshal(data, &m1)
    fmt.Println("err:", err)
    fmt.Println(m1)
    print_map(m1)
    fmt.Println()

    if m1["name"]!= nil {
        fmt.Println(m1["name"].(string))
    }
    if m1["type"]!= nil {
        fmt.Println(m1["type"].(string))
    } else {
        fmt.Println("there is not the key of type")
    }

}

//解析 map[string]interface{} 数据格式
func print_map(m map[string]interface{}) {
    for k, v := range m {
        switch value := v.(type) {
        case nil:
            fmt.Println(k, "is nil", "null")
        case string:
            fmt.Println(k, "is string", value)
        case int:
            fmt.Println(k, "is int", value)
        case float64:
            fmt.Println(k, "is float64", value)
        case []interface{}:
            fmt.Println(k, "is an array:")
            for i, u := range value {
                fmt.Println(i, u)
            }
        case map[string]interface{}:
            fmt.Println(k, "is an map:")
            print_map(value)
        default:
            fmt.Println(k, "is unknown type", fmt.Sprintf("%T", v))
        }
    }
}
运行结果
name is string simon
age is int 12
addr is string China

err: <nil>
[123 34 97 100 100 114 34 58 34 67 104 105 110 97 34 44 34 97 103 101 34 58 49 50 44 34 110 97 109 101 34 58 34 115 105 109 111 110 34 125]

err: <nil>
map[addr:China age:12 name:simon]
name is string simon
addr is string China
age is float64 12

simon
there is not the key of type

Process finished with exit code 0
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值