色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

golang 不同json結構體

錢衛國2年前9瀏覽0評論

Go語言的json包是將Go的數據結構和JSON格式進行相互轉換的標準庫。在Go語言中,結構體是一種常用的數據結構,json結構體則是在JSON格式下定義的數據結構,它們可以互相轉換。

定義一個json結構體的方式如下:

type Person struct {
Name string `json:"name"`
Age  int    `json:"age"`
Sex  string `json:"sex"`
}

這里使用結構體的字段的tag指定了JSON的鍵。tag是一個可以在運行時通過反射讀取的字符串,它通常包含著一個結構體字段的元信息,比如這里的json,表示該字段在JSON序列化和反序列化時使用的名稱。

除了使用tag指定JSON鍵,還可以使用omitempty選項指示在編碼時忽略空值字段:

type Person struct {
Name string `json:"name,omitempty"`
Age  int    `json:"age,omitempty"`
Sex  string `json:"sex,omitempty"`
}

另外,如果一個結構體字段的類型是自定義類型,可以使用自定義的MarshalJSON和UnmarshalJSON方法來指定該類型的序列化和反序列化方式。

type Currency struct {
Code   string  `json:"code"`
Amount float64 `json:"amount"`
}
func (c *Currency) MarshalJSON() ([]byte, error) {
return json.Marshal(fmt.Sprintf("%s %.2f", c.Code, c.Amount))
}
func (c *Currency) UnmarshalJSON(data []byte) error {
var value string
err := json.Unmarshal(data, &value)
if err != nil {
return err
}
parts := strings.Split(value, " ")
if len(parts) != 2 {
return errors.New("invalid currency format")
}
c.Code = parts[0]
c.Amount, err = strconv.ParseFloat(parts[1], 64)
if err != nil {
return errors.New("invalid currency amount")
}
return nil
}

以上是Go語言中不同類型的json結構體的定義方式和示例代碼。使用json結構體能夠更方便地將Go語言的數據結構轉換為JSON格式,以及將JSON格式的數據轉換為相應的數據結構。