Go - JSON

Go - JSON

二十七、json

1、json格式

[{"name":"李白", "age":20,"address":["北京","上海"]},{"name":"杜甫", "age":20,"address":["北京","城府"],"hobby":["足球","篮球"]}]

2、json序列化

json序列化 是指,将有 key-value 结构的数据类型(比如结构体、map、切片)序列化成json字符串的操作。

json.Marshal(a) //a是结构体\map\切片,即要转换成json的变量

通过 jsontag 标签,指定将数据转化成json格式后,其key值

3、反序列化

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

4、实例

serialfunc.go

package main

import (
	"encoding/json"
	"fmt"
)

type Monster struct {
	Name string `json:"monster_name"` //反射机制:通过json的tag标签,指定将key-value转换成json时其key值
	Age int `json:"monster_age"`
	Birthday string `json:"monster_birthday"`
	Sal float64 `json:"monster_sal"`
	Skill string `json:"monster_skill"`
}

//对结构体的序列化
func testStruct()  {
	monster := Monster{
		Name: "孙悟空",
		Age: 500,
		Birthday: "1997-01-01",
		Sal: 1000000.0,
		Skill: "火眼精金,七十二变",
	}
	//将monster序列化
	data, err := json.Marshal(&monster)
	if err != nil{
		fmt.Println("序列化错误 err=",err)
	}
	fmt.Println("结构体序列化:",string(data))
}

//将map进行序列化
func testMap()  {
	var a map[string]interface{}  //表示map的key是string类型,value是任意类型
	a = make(map[string]interface{})
	a["name"]="猪八戒"
	a["age"]=400
	a["birthday"]="1997-01-02"
	a["address"]=[2]string{"高老庄","西天"}
	data, err := json.Marshal(a)
	if err !=nil {
		fmt.Println("序列化错误 err=",err)
	}
	fmt.Println("map序列化:",string(data))
}

//对切片进行序列化
func testSlice()  {
	var slice []map[string]interface{}
	a := make(map[string]interface{})
	a["name"]="沙僧"
	a["age"]=300
	a["birthday"]="1996-01-03"
	slice = append(slice,a)
	b := make(map[string]interface{})
	b["name"]="唐僧"
	b["age"]=600
	b["birthday"]="1995-01-04"
	slice = append(slice,b)
	data, err := json.Marshal(slice)
	if err != nil{
		fmt.Println("序列化错误 err=",err)
	}
	fmt.Println("slice序列化:",string(data))
}

func main()  {
	//将结构体,map,切片进行序列化
	testStruct()
	testMap()
	testSlice()
}

unserialfunc.go

package main

import (
	"encoding/json"
	"fmt"
)

type Monster struct {
	Name string
	Age int
	Birthday string
	Sal float64
	Skill string
}

//将json字符串反序列化成结构体
func unMarshStruct()  {
	//str在项目开发中,是通过网络传输获取到或者时读取文件获取到的
	str := "{\"Name\":\"孙悟空\",\"Age\":500,\"Birthday\":\"1997-01-01\",\"Sal\":100000.0,\"Skill\":\"火眼精金,七十二变\"}"
	var monster Monster
	err := json.Unmarshal([]byte(str),&monster)
	if err != nil {
		fmt.Println("反序列化成结构体失败:",err)
	}
	fmt.Println("反序列化成结构体后为:",monster)
	fmt.Println("名字:",monster.Name)
}

//将json字符串反序列化成map
func unMarshMap()  {
	str := "{\"Name\":\"猪八戒\",\"Age\":400,\"Birthday\":\"1997-01-02\",\"address\":\"高老庄,西天\",\"Skill\":\"三十六变\"}"
	var a map[string]interface{}
	err := json.Unmarshal([]byte(str),&a)
	if err != nil {
		fmt.Println("反序列化成map失败:",err)
	}
	fmt.Println("反序列化成map后为:",a)
}

//将json字符串反序列化成切片
func unMarshSlice()  {
	str := "[{\"age\":300,\"birthday\":\"1996-01-03\",\"name\":\"沙僧\"},{\"age\":600,\"birthday\":\"1995-01-04\",\"name\":\"唐僧\"}]"
	var b []map[string]interface{}
	err := json.Unmarshal([]byte(str),&b)
	if err != nil {
		fmt.Println("反序列化成切片失败:",err)
	}
	fmt.Println("反序列化成切片后为:",b)
}

func main()  {
	unMarshStruct()
	unMarshMap()
	unMarshSlice()
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值