Golang序列化

json介绍

在这里插入图片描述
在这里插入图片描述

json数据格式

在这里插入图片描述

json数据在线解析

https://www.json.cn/网站可以验证一个json格式的数据是否正确。尤其是在我们编写比较复杂的json格式数据时,很有用。
在这里插入图片描述

json序列化

json序列化是指,将有key-value结构的数据类型(比如结构体、map、切片序列化成json字符串的操作。应用案例这里我们介绍一下结构体、map和切片的序列化,其它数据类型的序列化类似。

package main

import (
	"encoding/json"
	"fmt"
)

//结构体的序列化
type Monster struct {
	Name string
	Age int
	Birthday string
	Scal float64
	Skill string
}
func testStruct(){
	monster:=Monster{
		Name: "牛魔王",
		Age: 500,
		Birthday: "2011-11-11",
		Scal: 8000.0,
		Skill: "牛魔拳",
	}
	bytes, err := json.Marshal(monster)
	if err!=nil{
		fmt.Println("序列化失败",err)
	}else{
		fmt.Printf("序列化后的结果=%v \n",string(bytes))
	}
}

//map的序列化
func testMap(){
	var a map[string]interface{}
	a=make(map[string]interface{})
	a["name"]="红孩儿"
	a["age"]="30"
	a["address"]="洪崖洞"
	bytes, err := json.Marshal(a)
	if err!=nil{
		fmt.Println("序列化失败",err)
	}else{
		fmt.Printf("序列化后的结果=%v \n",string(bytes))
	}
}

//切片序列化
func testSlice(){
	var slice []map[string]interface{}
	var m1 map[string]interface{}
	m1=make(map[string]interface{})
	m1["name"]="jack"
	m1["age"]="7"
	m1["address"]="英国"
	slice=append(slice,m1)

	var m2 map[string]interface{}
	m2=make(map[string]interface{})
	m2["name"]="tom"
	m2["age"]="70"
	m2["address"]="美国"
	slice=append(slice,m2)

	bytes, err := json.Marshal(slice)
	if err!=nil{
		fmt.Println("序列化失败",err)
	}else{
		fmt.Printf("序列化后的结果=%v \n",string(bytes))
	}
}

//基本数据的序列化
func testFloat64(){
	var num float64=410.32
	bytes, err := json.Marshal(num)
	if err!=nil{
		fmt.Println("序列化失败",err)
	}else{
		fmt.Printf("序列化后的结果=%v \n",string(bytes))
	}
}
func main() {
	//testStruct()
	//testMap()
	testSlice()
	//testFloat64()
}

对于结构体的序列化,如果我们希望序列化后的key的名字,又我们自己重新制定,那么可以给struct指定一个tag标签

在这里插入图片描述
结果
在这里插入图片描述

json反序列化

json反序列化是指,将json字符串反序列化成对应的数据类型(比如结构体、map、切片)的操作

package main

import (
	"encoding/json"
	"fmt"
)

//结构体的序列化
type Monster struct {
	Name string
	Age int
	Birthday string
	Scal float64
	Skill string
}
//反序列化Struct
func unmarshalStruct(){
	str:="{\"Name\":\"牛魔王2222\",\"Age\":500,\"Birthday\":\"2011-11-11\",\"Sal\":8000,\"Skill\":\"牛魔拳\"}"
	var m Monster
	err := json.Unmarshal([]byte(str), &m)
	if err != nil {
		fmt.Println("error:", err)
	}
	fmt.Printf("%+v", m)
}
func main() {
	unmarshalStruct()

结果
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值