揭開Void:辨識Go 解組過程中未定義的欄位
將JSON 資料解組過程中未定義的欄位
var jsonBlob = []byte(`[ {"Name": "A", "Description": "Monotremata"}, {"Name": "B"}, {"Name": "C", "Description": ""} ]`) type Category struct { Name string Description string } var categories []Category err := json.Unmarshal(jsonBlob, &categories) if err != nil { fmt.Println("error:", err) } fmt.Printf("%+v", categories)
將JSON 資料解組到Go 結構體時,區分開空值和未指定欄位對於處理資料不一致至關重要。考慮以下範例:
[ {Name:A Description:Monotremata} {Name:B Description:} {Name:C Description:} ]
執行此程式碼將產生以下輸出:
如您所見,不可能區分未定義的「描述」欄位(如在「類別B」中)和一個空的「描述」欄位(如在「類別C」)。這種歧義可能會導致不正確的程序行為。
解決方案:使用指標來區分
type Category struct { Name string Description *string }
要克服這項挑戰,您可以將欄位類型修改為指標。如果 JSON 資料包含空字串值,則會建立指向空字串的指標。但是,如果 JSON 資料中不存在該字段,則它將保持為 nil。
[ {Name:A Description:0x1050c150} {Name:B Description:<nil>} {Name:C Description:0x1050c158} ]
透過此修改,更新後的輸出將變為:
現在,您可以輕鬆地區分空值和未指定的欄位。非 nil 指標表示空值,而 nil 指標表示該欄位不存在於 JSON 資料中。這允許您在程式中以不同的方式處理這些情況,確保資料準確性和適當的行為。以上是在 Go 中解組 JSON 時如何區分空白欄位和未定義欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!