在Go 解組中辨識Void 和未指定值
將JSON 資料解組到Go 結構體時,很難區分空值和缺失值價值觀。當您希望在程式中以不同方式處理這些值時,這一點尤其重要。
請考慮以下範例:
import ( "encoding/json" "fmt" ) type Category struct { Name string Description string } var categories []Category jsonBlob := []byte(`[ {"Name": "A", "Description": "Monotremata"}, {"Name": "B"}, {"Name": "C", "Description": ""} ]`) err := json.Unmarshal(jsonBlob, &categories) if err != nil { fmt.Println("error:", err) } fmt.Printf("%+v", categories)
在此範例中,類別 B 的描述欄位為空,而JSON 中未指定類別 C 的「描述」欄位。輸出為:
[{Name:A Description:Monotremata} {Name:B Description:} {Name:C Description:}]
如您所見,無法區分這兩種情況。
解決方案
您可以透過將欄位類型變更為指標來區分空值和缺失值。如果 JSON 中存在空字串值,則該值將設定為指向空字串的指標。如果 JSON 中不存在,則將其保留為 nil。
type Category struct { Name string Description *string }
經過此修改,輸出將變為:
[{Name:A Description:0x1050c150} {Name:B Description:<nil>} {Name:C Description:0x1050c158}]
現在,您可以使用 nil 值來識別缺少欄位並進行相應處理。
以上是在 Go 中解組 JSON 時如何區分空值和缺失值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!