Golang 结构体、map、切片的序列化

1.结构体序列化

package main

import (
    "encoding/json"
    "fmt"
)

//定义一个结构体
type Monster struct {
    Name string
    Age int
    Birthday string
    Sal float64
    skill string
}
func testStruct(){
    monster := Monster{
        Name : "牛魔王",
        Age : 500,
        Birthday : "2021-11-11",
        Sal : 80000.0,
        skill : "牛魔拳",
    }
    //将monster 序列化
    data, err :=json.Marshal(&monster)
    if err !=nil{
        fmt.Printf("序列化错误 err=%v\n",err)
    }
    //输出序列化结果
    fmt.Printf("manster序列化后=%v",string(data))
}
func main(){
    //演示结构体序列化
    testStruct()
}

 

 2.map序列化

package main

import (
    "encoding/json"
    "fmt"
)

//将map进行序列化
func testMap() {
    //定义一个Map
    var a map[string]interface{}
    //使用map,需要make
    a = make(map[string]interface{})
    a["name"] = "红孩儿"
    a["age"] = 30
    a["address"] = "火云洞"
    //将a这个map进行序列化
    data, err := json.Marshal(a)
    if err != nil {
        fmt.Printf("序列化错误 err=%v", err)
    }
    //输出序列化后的结果
    fmt.Printf("monster序列化后=%v\n", string(data))
}
func main() {
    //演示map序列化
    testMap()
}

 

 3.slice切片序列化

package main

import (
    "encoding/json"
    "fmt"
)

//对切片进行序列化,我们这个切片 []map[string]interface{}
func testSlice() {
    var slice []map[string]interface{}
    var m1 map[string]interface{}
    //使用map前需要make
    m1 = make(map[string]interface{})
    m1["name"] = "jack"
    m1["age"] = "7"
    m1["address"] = "北京"
    slice = append(slice, m1)

    var m2 map[string]interface{}
    //使用map前需要make
    m2 = make(map[string]interface{})
    m2["name"] = "tom"
    m2["age"] = "20"
    m2["address"] = "上海"
    slice = append(slice, m2)

    data, err := json.Marshal(slice)
    if err != nil {
        fmt.Printf("序列化错误 err=%v", err)
    }
    //输出序列化后的结果
    fmt.Printf("slice序列化后的结果=%v\n", string(data))
}
func main() {
    testSlice()
}

4.结构体序列化得tag标签

定义结构体的属性是大写的字母,但有些时候序列化后需要是小写的,这时候不能修改结构体的属性为小写,因为在序列化的操作是挎包操作,小写字母不是可导出的。利用 tag标签解决此问题.

正常情况下,你定义的结构体是这样子的,每个字段都由名字和字段类型组成

//定义一个结构体
type Monster struct {
    Name     string 
    Age      int    
    Birthday string
    Sal      float64
    skill    string
}

用反引号(Esc键下面的那个键)包含的字符串,称之为 Tag,也就是标签。

//定义一个结构体
type Monster struct {
    Name     string `json:"monster_name"`
    Age      int    `json:"monster_age"`
    Birthday string
    Sal      float64
    skill    string
}

 

posted @ 2021-06-26 16:32  创客未来  阅读(1137)  评论(0编辑  收藏  举报