go语言之JSON序列化

102 阅读1分钟

在go语言中JSON序列化

跟Java中几乎是一样的,需要注意的是go语言包管理机制的原因,go变量和引入包首字母需要大写,表示全部宝可以引用

以下示例以及调用API,go语言序列化后返回的是byte字节数组,需要额外转string

package main

import (
	"encoding/json"
	"fmt"
)

/**

json  序列化和反序列化
 */
func main() {


	var s = Student{"张三","北京"}

	//序列化
	b, err  :=  json.Marshal(s);
	if err==nil{
		fmt.Println("序列化后: ",b)
		fmt.Println("转换后: ",string(b))

		str := string(b)

		var stu = &Student{}
		//反序列化
		json.Unmarshal([]byte(str),stu);
		fmt.Println("反序列化后: " ,stu.Addre,stu.Name)
		fmt.Println("反序列化后: " ,stu)

	}


}


type Student struct {
	//序列化后null的原因 有序结构体的原因   序列化包无法访问到其他包的字段
	//对象首字母小写 小写表示私有 大写表示共有
	Name string `json name xml:"name"`
	Addre string `json name xml:"addre"`
}

Student 对象中我们这儿定义的是首字母大写变量,但一般明明按照首字母小写使用规范。

而json序列化包和Student包不在一个包内,反序列化会失败,对象值会为null,故此我们需要按照go语言中tag 序列化时候指定json序列化的变量 ,使用json时候会按照json后的变量进行序列化,xml同理

	Name string `json name xml:"name"`