golang中结构体与json

    科技2022-07-10  113

    golang中结构体与json

    简介

    在进行前后分离式开发时,json显得格外的重要,因为他是链接前后台重要的枢纽,在go语言中没有显式的对象,我们通常使用结构体来实现面向对象编程,本篇主要讲的是golang中结构体与json·的序列化以及反序列化。

    什么是json

    json是储存和交换文本信息的语法,他类似于xml,但是他比xml更加的便捷,快速,易于解析。主要使用场景就是作为前后台数据交互的枢纽,以下是一个简单json的格式:

    { "name":"huweicheng", "age":99 }

    将结构体序列化

    在golang中有非常丰富的库,我们可以直接使用"encoding/json"包中的Marshal函数进行结构体的序列化,以下是案例:

    package main import ( "encoding/json" "fmt" ) //结构体与json //1,把go中的结构体变量--->json字符串 //2。把json字符串--->go语言中能够识别的结构体 type persion struct { Name string `json:"name"` Age int`json:"age"` } func main() { p1:=persion{ Name: "huweicheng", Age: 99, } //将p1转json b,err:=json.Marshal(p1)//序列号 if err!=nil { fmt.Printf("marshal fail,err:%v",err) return } fmt.Printf(string(b)) }

    运行结果

    {“name”:“huweicheng”,“age”:99}

    在使用这个Marshal时有几个需要特别注意的地方:在申明结构体时字段的首写字母必须大写,这里牵扯到一个字段可见性的问题,小写代表了私有的,只能在当前包中使用,而使用Marshal时如果字段为小写那么将无法访问到字段;一般来说前台接受到的字段名称是小写的,如果将字段名称设置为大写,那么返回给前台的key也将是大写的,我们可以在申明字段的时候在后面加一个tag,作用类似于别名,写法如下:

    type persion struct { Name string `json:"name"` Age int`json:"age"` }

    将json反序列化

    例子如下:

    package main import ( "encoding/json" "fmt" ) //结构体与json //1,把go中的结构体变量--->json字符串 //2。把json字符串--->go语言中能够识别的结构体 type persion struct { Name string `json:"name"` Age int`json:"age"` } func main() { p1:=persion{ Name: "huweicheng", Age: 99, } //将p1转json b,err:=json.Marshal(p1)//序列号 if err!=nil { fmt.Printf("marshal fail,err:%v",err) return } fmt.Printf(string(b)) //反序列话 str := `{"name":"huweicheng","age":99}` var p2 persion json.Unmarshal([]byte(str),&p2)//传指针是为了能在函数内部修改p2 fmt.Printf("%#v\n",p2) }

    运行结果:

    {“name”:“huweicheng”,“age”:99}main.persion{Name:“huweicheng”, Age:99}

    Processed: 0.008, SQL: 8