头图

跟Java中几乎是一样的,需要注意的是go语言包管理机制的原因,go变量和引入包首字母需要大写,表示全部宝可以引用
以下示例以及调用API,go语言序列化后返回的是byte字节数组,需要额外转string
go
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同理
c 代码解读复制代码 Name string json name xml:"name"


运维社
12 声望4 粉丝