Go_Json的序列化和反序列化

JSON:

  • JSON(JavaScript Object Notation):是一种轻量级的数据交换格式。 它是基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
  • 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于计算机解析和生成,并有效的提升网络传输效率。
  • Json易于机器解析和生成,并有效的提升网络传输效率,通常程序传输时会先将数据序列化成json字符串,接收方再反序列化成原数据类型
  • 所有的数据类型都可以通过Json表示
  • Json.cn这个网站可以验证Json格式
  • 序列化用json.Marshal()
  • 反序列化用json.Unmarshal(),反序列化时要和序列化前的数据类型保持一致
Json格式:

在这里插入图片描述

基本数据类型转Json:

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
}

结构体与Json:

json.Marshal:将Go语言中的数据结构转换为JSON格式的字节数组

type Student struct {
	// 变量首字母大写才能被解析
	Name string `json:"name"` // name表示在json中Name的字段名
	Age  int    `json:"age"`
}

func main() {
	student := Student{
		Name: "韩信",
		Age:  24,
	}
	marshal, _ := json.Marshal(&student)
	s := string(marshal)
	fmt.Println("序列化后:", s) // 序列化后: {"name":"韩信","age":24}

	// 使用Unmarshal反序列化
	json.Unmarshal([]byte(s), &student)
	fmt.Println("反序列化后:", student) // 反序列化后: {韩信 24}
}

map与json:

func main() {
	var m map[string]interface{}
	m = make(map[string]interface{})
	m["name"] = "韩信"
	m["age"] = 23
	m["address"] = "野区"

	marshal, _ := json.Marshal(m)
	str := string(marshal)
	fmt.Println("序列化后:", str) // 序列化后: {"address":"野区","age":23,"name":"韩信"}

	// 单独使用的时候,反序列化不需要make,被封装到Unmarshal中了

	json.Unmarshal([]byte(str), &m)
	fmt.Println("反序列化后:", m) // 反序列化后: map[address:野区 age:23 name:韩信]
}

切片与Json:

func main() {
	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, _ := json.Marshal(m)
	str := string(marshal)
	fmt.Println("序列化后:", str) // 序列化后: {"address":"野区","age":23,"name":"韩信"}

	json.Unmarshal([]byte(str), &slice)
	fmt.Println("反序列化后:", slice) // 反序列化后: [map[address:野区 age:23 name:韩信]]
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itzhuzhu.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值