[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
相關文章
相關標籤/搜索