golang中对json数据操作的支持 - Go语言中文社区

golang中对json数据操作的支持


1、json
1.1、json基本介绍:
在这里插入图片描述
1.2、json数据格式说明
在这里插入图片描述
2、json的序列化
在这里插入图片描述
2.1、结构体及结构体切片的序列化

package main

import (
	"encoding/json"
	"fmt"
)

/**
 *  @Description:golang中对json数据操作的支持
 *  @Author: guai
 *  @Date:2020/2/24 17:37
**/

type Vegetables struct {
//可通过指定tag标签在序列化时为key指定一个新的名字  `为键盘左上角的异音符 不是引号!!!
	Name     string  `json:"Vegetables_name"`
	Age      int
	Birthday string
	Sal      float64
	Skill    string
}

func main() {
	cabbage := Vegetables{
		"cabbage",
		1,
		"2020-20-20",
		15.6,
		"eat",
	}
	radish := Vegetables{
		"radish",
		1,
		"2020-20-20",
		13.3,
		"eat",
	}
	var veges []Vegetables
	veges = append(veges, cabbage)
	veges = append(veges, radish)
	//将一个Vegetables类型的变量格式化
	//data, err := json.Marshal(&cabbage)
	//将veges切片序列化
	data, err := json.Marshal(veges)
	if err != nil {
		fmt.Println("序列化错误", err)
		return
	}
	fmt.Println("data:", string(data))
}

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

2.2、map及map切片的序列化

func main(){
	//2、map的序列化
	//定义一个map vegetables key为string类型,value为interface可用于接收所有类型的数据
	var vegetable map[string]interface{}
	//map需要使用make初始化
	vegetable = make(map[string]interface{})
	vegetable["name"] = "cabbage"
	vegetable["age"] = 1
	vegetable["skill"] = "eat"

	var vegetable1 map[string]interface{}
	vegetable1 = make(map[string]interface{})
	vegetable1["name"] = "cabbage"
	vegetable1["age"] = 1
	vegetable1["skill"] = "eat"

	var vegetables []map[string]interface{}
	vegetables = append(vegetables, vegetable)
	vegetables = append(vegetables, vegetable1)
	//序列化map
	//data, err := json.Marshal(vegetable)
	//序列化map切片
	data, err := json.Marshal(vegetables)
	if err != nil {
		fmt.Println("序列化出错!err:", err)
		return
	}
	fmt.Println("data:", string(data))
}

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

3、json反序列化
json反序列化值,将json字符串反序列化为对应的数据类型如结构体、map、切片
案例:


type Vegetables struct {
	Name     string `json:"Vegetables_name"`
	Age      int
	Birthday string
	Sal      float64
	Skill    string
}
func main(){
//3、反序列化
	//3.1、反序列化为结构体切片
	//  ``异音符表示 ``中的特殊字符不需要使用转义字符转义
	str := `[{"Vegetables_name":"cabbage","Age":1,"Birthday":"2020-20-20","Sal":15.6,"Skill":"eat"},{"Vegetables_name":"radish","Age":1,"Birthday":"2020-20-20","Sal":13.3,"Skill":"eat"}]`
	//定义Vegetables切片 因为在开发中一般不能确定到底有几条数据故使用切片接收数据较为合理
	var vegetables []Vegetables
	err := json.Unmarshal([]byte(str), &vegetables)
	if err != nil {
		fmt.Println("反序列化错误", err)
		return
	}
	fmt.Println("vegetables:", vegetables)

	//3.2、反序列化为map切片
	str1 := `[{"age":1,"name":"cabbage","skill":"eat"},{"age":1,"name":"cabbage","skill":"eat"}]`
	var vegetables1 []map[string]interface{}
	err = json.Unmarshal([]byte(str1), &vegetables1)
	if err != nil {
		fmt.Println("饭序列化错误:", err)
		return
	}
	fmt.Println("vegetables1;", vegetables1)
	//[{"age":1,"name":"cabbage","skill":"eat"},{"age":1,"name":"cabbage","skill":"eat"}]
}

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

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_44373940/article/details/104481719
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-18 05:58:09
  • 阅读 ( 413 )
  • 分类:前端

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢