Golang实现json的序列化和反序列化

Golang的标准库中"encoding/json"包含了对json的处理,Golang的数据类型与json的类型的转化规则为:

Golang 数据类型JSON 数据类型
boolBoolean
int、floatNumber
stringString
structObject
array、sliceArray
[]bytebase64编码后的JSON String
mapJSON Object, key必须是string
interface{}按照内部实际进行转换
nilnull
channel, funcUnsupportedTypeError

我们来看代码:

package main

import (
	"encoding/json"
	"fmt"
	"reflect"
)

// Person 人的基本属性
type Person struct {
	Name   string  `json:"name"` //Name与name不一定需要一样
	Age    int     `json:"age"`
	Sex    string  `json:"sex"`
	Weight float32 `json:"weight"`
}

func main() {
	//初始化一个person
	mrtwenty := Person{"mrtwenty", 12, "男", 17.1}
	str, err := json.Marshal(mrtwenty) //json序列化
	if err != nil {
		panic(err)
	}

	fmt.Println("序列化后的字符串:", string(str)) //返回的json key 按照结构体定义的方式呈现  ,Name变成了name

	//反序列化
	var person Person                  //先定义一个变量
	err = json.Unmarshal(str, &person) //json反序列化
	if err != nil {
		panic(err)
	}

	fmt.Println("反序列化回来:", person, reflect.TypeOf(person))
	fmt.Println("输出其中的值:", person.Name) //记得这里会变成大写

	personList := [2]Person{}
	personList[0] = Person{"mrtwenty", 12, "男", 17.1}
	personList[1] = Person{"zhao", 12, "男", 17.1}
	str, err = json.Marshal(personList) //json序列化
	if err != nil {
		panic(err)
	}
	fmt.Println("序列化后的字符串:", string(str))

	var personList2 []Person
	err = json.Unmarshal(str, &personList2) //json反序列化
	if err != nil {
		panic(err)
	}
	fmt.Println("反序列化回来:", personList2, reflect.TypeOf(personList2))
	fmt.Println("输出其中的值:", personList2[1].Name)

	fmt.Println("循环输出:")
	for _, p := range personList2 {
		fmt.Println(p.Name, p.Age)
	}
}

先定义一个结构体,初始化后,进行序列化与反序列化处理,上面的例子应该是golang最常见的用法了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值