golang 字段 序列化 反序列化 简介

目录

一、概括

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

1、将结构体序列化成json

2、将map序列化为json

3、切片序列化成json

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

1、json反序列化成结构体

2、json反序列化成map

3、切片反序列化


一、概括

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)
}
复制代码

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值