Golang-json02(演示struct, map,slice 序列化)

    科技2024-05-23  75

    json序列化是将有key-val结构的数据类型,序列化成json字符串。

    struct序列化

    encoding/json包中的func Marshal(v interface{}) ([]byte, error),接收一个空接口,即可以接收任何类型的数据,返回字符切片

    package main import( "fmt" "encoding/json" ) type Monster struct{ Name string Age int Sal float64 Skill string } func testTruct(){ monster := Monster{ Name : "牛魔王", Age : 500, Sal : 1400.50, Skill : "元气斩", } //将结构体序列化 data, err := json.Marshal(&monster) if err!= nil{ fmt.Printf("序列号错误 err=%v\n",err) } fmt.Printf("monster 序列化后 = %v\n",string(data)) //string()将数字切片转换成键值对 } func main(){ testTruct() } 输出结果 monster 序列化后 = {"Name":"牛魔王","Age":500,"Sal":1400.5,"Skill":"元气斩"}

    map序列化

    func testMap(){ //测试map序列化 //map[string]interface{}的意思是value值可以是任意 //类型 var a map[string]interface{} //使用map需要make a = make(map[string]interface{}) a["name"] = "卡卡罗特" a["age"] = 45 a["skill"] = "界王拳" //也可以a["skill"] = [2]string{"龟派气功", "爆气"} //回顾数值表示形式 data, err:= json.Marshal(a) //知识点:map本身就是引用,不用再加&取地址 if err!= nil{ fmt.Printf("序列号错误 err=%v\n",err) } fmt.Printf("a map 序列化后 = %v\n",string(data)) }

    slice序列化

    func testSlice(){ //声明一个切片,切片元素是切片类型 var slice []map[string]interface{} var m1 map[string]interface{} //使用map前,现需要make m1 = make(map[string]interface{}) m1["Fname"] = "jack" m1["Lname"] = "ma" slice = append(slice, m1) //知识点,动态增加slice var m2 map[string]interface{} //使用map前,现需要make m2 = make(map[string]interface{}) m2["Fname"] = "jack" m2["Lname"] = "chen" slice = append(slice, m2) data, err:= json.Marshal(slice) if err!= nil{ fmt.Printf("序列号错误 err=%v\n",err) } fmt.Printf("a map 序列化后 = %v\n",string(data)) }

    基本数据类型

    对基本数据类型序列化意义不大,序列之后是一个字符串

    补充知识

    monster := Monster{ Name : "牛魔王", //这边Name是大写,而web浏览器接受 Age : 500, //可能需要小写的name Sal : 1400.50, Skill : "元气斩", } //解决办法:在定义时可以加一个自定义的tag type Monster struct{ Name string `json:"name"` //这边用了Golan的反射机制 Age int Sal float64 Skill string }

    注意:不能直接在struct定义时用 name string 形式,因为json包与当前的main包属于跨包调用,小写name不能跨包使用,序列化时会被丢弃,但不报错,所以只能使用tag形式改名。

    Processed: 0.013, SQL: 8