41-Golang中的json

json基本介绍

json是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成

json是在2001开始退关使用的数据格式,目前已经成为主流的数据格式

json易于机器解析和生成,并有效的提升网络传输效率,通常程序在网络传输时会先将数据(结构体,map等)序列化成json字符串,到接收方得到接送字符串时,在反序列化恢复成原来的数据类型(结构体,map等)。这种方式已然成为哥哥语言的标准

在这里插入图片描述

json的应用场景

在这里插入图片描述

json数据格式说明

在js语言中,一切都是对象。因此,任何支持的类型都可以通过json来标识,例如字符串,数字,对象,数组等

json键值对是用来保存数据的一种方式

键/值对组合中的键名写在前面并用双引号“”包裹,使用冒号:分割,然后紧接着值:

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

json的序列化

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

package main

import (
	"encoding/json"
	"fmt"
)

//定义一个结构体
type Monster struct {
	Name     string
	Age      int
	Birthday string
	Sal      float64
	Skill    string
}

func testStruct() {
	//演示
	monster := Monster{
		Name:     "kunkun",
		Age:      25,
		Birthday: "1998-8-2",
		Sal:      199999.0,
		Skill:    "niganma",
	}
	//将monster序列化
	data, err := json.Marshal(&monster)
	if err != nil {
		fmt.Printf("序列号错误 err=%v\n", err)
	}
	//输出序列化后的结果
	fmt.Printf("monster序列化后的结果=%v\n", string(data))

}

func main() {
	//演示结构体,map,切片进行序列号
	testStruct()
}
//monster序列化后的结果={"Name":"kunkun","Age":25,"Birthday":"1998-8-2","Sal":199999,"Skill":"niganma"}


json的反序列化

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

package main

import (
	"encoding/json"
	"fmt"
)

//定义一个结构体
type Monster struct {
	Name     string
	Age      int
	Birthday string
	Sal      float64
	Skill    string
}

//演示将json字符串,反序列成struct
func unmarshalStruct() {
	//说明str在项目开发中,是通过网络传输获取到,或者是读取文件获取到
	str := "{\"Name\":\"kunkun\",\"Age\":99,\"Birthday\":\"1998-8-2\",\"Sal\":90000,\"Skill\":\"sing\"}"

	//定义一个monster实例
	var monster Monster
	err := json.Unmarshal([]byte(str), &monster)
	if err != nil {
		fmt.Printf("unmarshal err=%v\n", err)
	}
	fmt.Printf("反序列化后monster = %v\n", monster)
}

//演示将json字符串,反序列成map
func unmarshalMap() {
	str := "{\"Name\":\"kunkun\",\"Age\":99,\"Birthday\":\"1998-8-2\",\"Sal\":90000,\"Skill\":\"dance\"}"

	//定义一个map
	var a map[string]interface{}
	//反序列化
	err := json.Unmarshal([]byte(str), &a)
	if err != nil {
		fmt.Printf("unmarshal err=%v\n", err)
	}
	fmt.Printf("反序列化后a = %v\n", a)
}

//演示将json字符串,反序列成slice
func unmarshalSlice() {
	str := "[{\"address\":\"北疆\",\"Age\":\"99\",\"Name\":\"kunkun\"},"
	"{\"address\":\"北疆\",\"Age\":\"99\",\"Name\":\"kunkun\"}]"

	//定义一个slice
	var slice []map[string]interface{}
	//反序列化
	err := json.Unmarshal([]byte(str), &slice)
	if err != nil {
		fmt.Printf("unmarshal err=%v\n", err)
	}
	fmt.Printf("反序列化后slice = %v\n", slice)
}

func main() {
	unmarshalStruct()
	unmarshalMap()
	unmarshalSlice()
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值