Golang-json03(反序列化)

    科技2024-06-27  73

    Unmarshal简介

    func Unmarshal(data []byte, v interface{}) error Unmarshal函数解析json编码的数据并将结果存入v指向的值。

    应用场景

    web服务器(go语言): 数值,切片等 —序列化—>json字符串 | 传输 | 浏览器端:json ----反序列化——>还原数据形式

    案例演示(unmarshal)

    package main import( "fmt" "encoding/json" ) //反序列化成结构体 type Monster struct{ Name string Age int Sal float64 Skill string } func unmarshalStruct(){ //真是情况下json是通过网络或者读取文件获得的 str := "{\"name\":\"牛魔王\",\"Age\":500,\"Sal\":1400.5,\"Skill\":\"元气斩\"}" //定义一个Monster实例 var monster Monster err := json.Unmarshal([]byte(str), &monster) //先把序列转成byte切片,反序列话后传给&monster //这边必须是传引用,才能在函数中改变外部的monster if err != nil { fmt.Printf("反序列化失败 : %v", err) } fmt.Printf("反序列化之后: %v", monster) } func unmarshalMap(){ //真是情况下json是通过网络或者读取文件获得的 str :=" {\"age\":45,\"name\":\"卡卡罗特\",\"skill\":[\"龟派气功\",\"爆气\"]}" var a map[string]interface{} //反序列化的map不用make //make被封装到unmarshal函数中了 err := json.Unmarshal([]byte(str), &a) //为啥这边传a会报错, 但&a就可以 //a本身就是引用为啥还要加& if err != nil { fmt.Printf("反序列化失败 : %v", err) } fmt.Printf("反序列化之后: %v", a) } func main(){ //unmarshalStruct() unmarshalMap() }
    Processed: 0.014, SQL: 8