Go語言中JSON標籤的用法與技巧

tatasix發表於2024-08-28

在Go語言中,JSON標籤(JSON tags)是用來指定結構體欄位在序列化為JSON時的名稱和行為的。JSON標籤通常寫在結構體欄位的後面,用反引號(`)括起來。以下是一些常用的JSON標籤:

  1. json:"field_name":指定JSON物件中的欄位名。例如:
type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}
  1. omitempty:當欄位值為空(如零值、空字串、nil等)時,忽略該欄位。例如:
type Person struct {
    Name string `json:"name,omitempty"`
    Age  int    `json:"age,omitempty"`
}
  1. -:忽略該欄位,不將其序列化到JSON中。例如:
type Person struct {
    Name string `json:"name"`
    Age  int    `json:"-"`
}
  1. json:",inline":將結構體欄位內聯到父結構體中,即不生成巢狀的JSON物件。例如:
type Address struct {
    City string `json:"city"`
    State string `json:"state"`
}

type Person struct {
    Name    string  `json:"name"`
    Age     int     `json:"age"`
    Address `json:",inline"`
}
  1. json:",string":將欄位值序列化為JSON字串。例如:
type Person struct {
    Name string `json:"name"`
    Age  int    `json:",string"`
}
  1. json:",number":將欄位值序列化為JSON數字。這個標籤通常用於float64int64型別的欄位。例如:
type Product struct {
    Name  string  `json:"name"`
    Price float64 `json:",number"`
}
  1. json:",bool":將欄位值序列化為JSON布林值。這個標籤通常用於bool型別的欄位,但在Go中,預設情況下布林值已經是布林型別,所以這個標籤很少使用。

注意:JSON標籤是大小寫不敏感的,但在Go中,結構體欄位名是大小寫敏感的。因此,在使用JSON標籤時,請確保它們與結構體欄位名匹配。

這些標籤可以組合使用,例如:

type Person struct {
    Name    string  `json:"name"`
    Age     int     `json:"age,omitempty,string"`
    Address *Address `json:"address,omitempty"`
}

相關文章