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

时间:2019-07-28作者:klpeng分类:IT综合浏览:2120评论:0

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

Golang 数据类型 JSON 数据类型
bool Boolean
int、float Number
string String
struct Object
array、slice Array
[]byte base64编码后的JSON String
map JSON Object, key必须是string
interface{} 按照内部实际进行转换
nil null
channel, func UnsupportedTypeError

我们来看代码:

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最常见的用法了。

打赏
文章版权声明:除非注明,否则均为彭超的博客原创文章,转载或复制请以超链接形式并注明出处。
相关推荐

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

猜你喜欢