在Go語言中,JSON標籤(JSON tags)是用來指定結構體欄位在序列化為JSON時的名稱和行為的。JSON標籤通常寫在結構體欄位的後面,用反引號(`)括起來。以下是一些常用的JSON標籤:
json:"field_name"
:指定JSON物件中的欄位名。例如:
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
omitempty
:當欄位值為空(如零值、空字串、nil等)時,忽略該欄位。例如:
type Person struct {
Name string `json:"name,omitempty"`
Age int `json:"age,omitempty"`
}
-
:忽略該欄位,不將其序列化到JSON中。例如:
type Person struct {
Name string `json:"name"`
Age int `json:"-"`
}
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"`
}
json:",string"
:將欄位值序列化為JSON字串。例如:
type Person struct {
Name string `json:"name"`
Age int `json:",string"`
}
json:",number"
:將欄位值序列化為JSON數字。這個標籤通常用於float64
和int64
型別的欄位。例如:
type Product struct {
Name string `json:"name"`
Price float64 `json:",number"`
}
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"`
}