[Go - Note] go中json序列化(Encode)和反序列化(Decode)以及struct tag

import "encoding/json"json

struct tag

能够选择的控制字段有几种:

*   `-`:不要解析这个字段
*   `omitempty`:当字段为空(默认值)时,不要解析这个字段。好比 false、0、nil、长度为 0 的 array,map,slice,string
*   `FieldName`:当解析 json 的时候,使用这个名字
*   type,有些时候,咱们在序列化或者反序列化的时候,可能结构体类型和须要的类型不一致,这个时候能够指定,支持string,number和boolean,array,object

Encode

func Marshal(v interface{}) ([]byte, error)指针

  • omitempty: struct字段如有次tag,序列化时若为零值则在结果中忽略次字段

Decode

func Unmarshal(data []byte, v interface{}) errorcode

  • 区分nil和zeroValue:对零值非nil字段可用在构造的struct中用指针方式检验对应字段是否存在和零值

反射获取tag内容

type User struct {
     UserId   int    `json:"user_id" bson:"user_id" test:"test"`
    UserName string `json:"user_name" bson:"user_name"`}
获取tag中test的值

复制代码
 // 获取tag中的内容
 typeof := reflect.TypeOf(u)
 field := typeof.Elem().Field(0)
 fmt.Println(field.Tag.Get("json"))
 // 输出:user_id
 fmt.Println(field.Tag.Get("bson"))
 // 输出:user_id
 fmt.Println(field.Tag.Get("test"))
 // 输出:test
相关文章
相关标签/搜索