专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

go语言中字段序列化与反序列化的总结

一、概括

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,现在是主流的数据格式,常用于web开发中前端与后端进行数据交互的一种方式

二、在go中常见的几种序列化成json的方式

  • 1、将结构体序列化成json
    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":["语文","数学","音乐"]}

  • 2、将map序列化为json
    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))
        }
    }

  • 3、切片序列化成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))
        }
    }

三、反序列化(将json转换为go代码能识别的结构体、map、切片)

  • 1、json反序列化成结构体
    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)
    }

  • 2、json反序列化成map
    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)
    }

  • 3、切片反序列化
    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)
    }

未经允许不得转载:搜云库技术团队 » go语言中字段序列化与反序列化的总结

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们