go語言中字段序列化與反序列化的總結

1、歸納

JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,如今是主流的數據格式,經常使用於web開發中前端與後端進行數據交互的一種方式前端

2、在go中常見的幾種序列化成json的方式

  • 一、將結構體序列化成jsonweb

    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    
    type Student struct {
        Name   string   `json:"name"`   // 姓名
        Age    int      `json:"age"`    // 年齡
        Gender string   `json:"gender"` // 性別
        Score  float64  `json:"score"`  // 分數
        Course []string `json:"course"` // 課程
    }
    
    func main() {
        stu := Student{
            "張三",
            20,
            "男",
            78.6,
            []string{"語文", "數學", "音樂"},
        }
        fmt.Println(stu)
        data, err := json.Marshal(&stu)
        if err != nil {
            fmt.Println("序列化錯誤", err)
        } else {
            fmt.Println(string(data))
        }
    }
    // 返回結果:{"name":"張三","age":20,"gender":"男","score":78.6,"course":["語文","數學","音樂"]}
  • 二、將map序列化爲jsonjson

    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    
    func main() {
        var map1 map[string]interface{} // 使用一個空接口表示能夠是任意類型
        map1 = make(map[string]interface{})
        map1["name"] = "張三"
        map1["province"] = "廣東省"
        map1["city"] = "深圳市"
        map1["salary"] = 1000
        map1["hobby"] = [...]string{"看書", "旅遊", "學習"}
    
        data, err := json.Marshal(map1)
        if err != nil {
            fmt.Println("序列化失敗")
        } else {
            fmt.Println(string(data))
        }
    }
  • 三、切片序列化成json後端

    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    
    func main() {
        var slice1 []map[string]interface{}
        var m1 map[string]interface{}
        m1 = make(map[string]interface{})
        m1["name"] = "張三"
        m1["address"] = "廣東省深圳市"
        slice1 = append(slice1, m1)
    
        var m2 map[string]interface{}
        m2 = make(map[string]interface{})
        m2["name"] = "李四"
        m2["address"] = "廣東省廣州市"
        slice1 = append(slice1, m2)
    
        data, err := json.Marshal(slice1)
        if err != nil {
            fmt.Println("序列化錯誤")
        } else {
            fmt.Println(string(data))
        }
    }

3、反序列化(將json轉換爲go代碼能識別的結構體、map、切片)

  • 一、json反序列化成結構體markdown

    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    
    type Student struct {
        Name   string   `json:"name"`   // 姓名
        Age    int      `json:"age"`    // 年齡
        Gender string   `json:"gender"` // 性別
        Score  float64  `json:"score"`  // 分數
        Course []string `json:"course"` // 課程
    }
    
    func main() {
        var stu Student
        str := `{"name":"張三","age":20,"gender":"男","score":78.6,"course":["語文","數學","音樂"]}`
    
        err := json.Unmarshal([]byte(str), &stu)
        if err != nil {
            fmt.Println("反序列化失敗")
        }
        fmt.Println(stu)
    }
  • 二、json反序列化成mapapp

    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    
    func main() {
        var map1 map[string]interface{} // 使用一個空接口表示能夠是任意類型
        //map1 = make(map[string]interface{})
        str := `{"city":"深圳市","hobby":["看書","旅遊","學習"],"name":"張三","province":"廣東省","salary":1000}`
    
        err := json.Unmarshal([]byte(str), &map1)
        if err != nil {
            fmt.Println("反序列化失敗", err)
        }
        fmt.Println(map1)
    }
  • 三、切片反序列化ide

    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    
    func main() {
        var slice []map[string]interface{}
        str := `[{"address":"廣東省深圳市","name":"張三"},{"address":"廣東省廣州市","name":"李四"}]`
        err := json.Unmarshal([]byte(str), &slice)
        if err != nil {
            fmt.Printf("unmarshal err=%v\n", err) }
        fmt.Printf("反序列化後 slice=%v\n", slice)
    }
相關文章
相關標籤/搜索