千家信息网

Golang中Json的序列化和反序列化怎么使用

发表于:2025-02-16 作者:千家信息网编辑
千家信息网最后更新 2025年02月16日,这篇文章主要介绍"Golang中Json的序列化和反序列化怎么使用",在日常操作中,相信很多人在Golang中Json的序列化和反序列化怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作
千家信息网最后更新 2025年02月16日Golang中Json的序列化和反序列化怎么使用

这篇文章主要介绍"Golang中Json的序列化和反序列化怎么使用",在日常操作中,相信很多人在Golang中Json的序列化和反序列化怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Golang中Json的序列化和反序列化怎么使用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

JSON:

  • JSON(JavaScript Object Notation):是一种轻量级的数据交换格式。 它是基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。

  • 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于计算机解析和生成,并有效的 提升网络传输效率。

  • Json易于机器解析和生成,并有效的提升网络传输效率,通常程序传输时会先将数据序列化成json字符串,接收方再反序列化成原数据类型

  • 所有的数据类型都可以通过Json表示

  • Json.cn这个网站可以验证Json格式

  • 序列化用json.Marshal()

  • 反序列化用json.Unmarshal(),反序列化时要和序列化前的数据类型保持一致

创建格式:

基本数据类型序列化:

func testBasic() {        num := 1.111        marshal, err := json.Marshal(num)        if err != nil {                fmt.Println("json.Marshal err:", err)        }        fmt.Println("序列化后:", string(marshal)) // 序列化后: 1.111}

结构体序列化:

func main() {        testStudent()}/**type Student struct {        Name     string        Age      int        Birthday string        Address  string}*/// 如果加上`json:"student_name"`,序列化以后的数据字段是返回指定格式的,可以小写,json固定,后面的随意type Student struct {        // 变量首字母大写才能被解析        Name     string `json:"student_name"`        Age      int    `json:"student_age"`        Birthday string `json:"student_birthday"`        Address  string `json:"student_address"`}func testStudent() {        student := Student{                Name:     "itzhuzhu",                Age:      24,                Birthday: "1998-01-01",                Address:  "广州市天河区",        }        marshal, err := json.Marshal(&student)        if err != nil {                fmt.Println("json.Marshal err:", err)        }        fmt.Println("序列化后:", string(marshal)) // 序列化后:{"Name":"itzhuzhu","Age":24,"Birthday":"1998-01-01","Address":"广州市天河区"}}

map序列化:

func testMap() {        var m map[string]interface{}        m = make(map[string]interface{})        m["name"] = "韩信"        m["age"] = 23        m["address"] = "广州"        marshal, err := json.Marshal(m)        if err != nil {                fmt.Println("json.Marshal err:", err)        }        fmt.Println("序列化后:", string(marshal)) // 序列化后: {"address":"广州","age":23,"name":"韩信"}}

切片序列化:

func testSlice() {        var slice []map[string]interface{}        var m map[string]interface{}        m = make(map[string]interface{})        m["name"] = "韩信"        m["age"] = 23        m["address"] = "广州"        slice = append(slice, m)        marshal, err := json.Marshal(m)        if err != nil {                fmt.Println("json.Marshal err:", err)        }        fmt.Println("序列化后:", string(marshal)) // 序列化后: {"address":"广州","age":23,"name":"韩信"}}

反序列化为结构体:

func deserialize() {        str := "{\"Name\":\"itzhuzhu\",\"Age\":24,\"Birthday\":\"1998-01-01\",\"Address\":\"广州市天河区\"}"        // 使用Unmarshal反序列化        var student Student        err := json.Unmarshal([]byte(str), &student)        if err != nil {                fmt.Println("json.Unmarshal err:", err)        }        fmt.Println("反序列化后:", student) // 反序列化后: {itzhuzhu 24 1998-01-01 广州市天河区}}

反序列化为map:

func deserializeMap() {        str := " {\"address\":\"广州\",\"age\":23,\"name\":\"韩信\"}"        // 反序列化的时候不需要make,被封装到Unmarshal中了        var m map[string]interface{}        err := json.Unmarshal([]byte(str), &m)        if err != nil {                fmt.Println("json.Unmarshal err:", err)        }        fmt.Println("反序列化后:", m) // map[address:广州 age:23 name:韩信]}

反序列化为切片:

func deserializeSlice() {        str := " [{\"address\":\"广州\",\"age\":23,\"name\":\"韩信\"}]"        var slice []map[string]interface{}        err := json.Unmarshal([]byte(str), &slice)        if err != nil {                fmt.Println("json.Unmarshal err:", err)        }        fmt.Println("反序列化后:", slice) // 反序列化后: [map[address:广州 age:23 name:韩信]]}

到此,关于"Golang中Json的序列化和反序列化怎么使用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0