Go 中JSON Null 與缺失欄位:比較
在Go 中處理JSON 資料時,區分以下欄位至關重要:顯式設定為null 以及JSON 輸入中簡單缺少的欄位。當 JSON 資料表示 Golang 結構體時,這種差異就變得很有必要。
null 和缺失欄位都會導致對應 Go 結構體欄位中的 nil 值。但是,區分這兩種情況對於確定某個欄位是否故意設定為空或未包含在 JSON 資料中至關重要。
要解決此挑戰,可以使用兩種方法:
將可選結構與泛型一起使用(Go 1.18 )
Go 1.18引入泛型,允許建立泛型可選結構來處理這種情況。可選結構具有一個定義的布林字段,指示 JSON 輸入中是否存在值,以及一個指向實際值的值指標。
type Optional[T any] struct { Defined bool Value *T }
type Payload struct { Field1 Optional[string] `json:"field1"` Field2 Optional[bool] `json:"field2"` Field3 Optional[int32] `json:"field3"` }
使用自訂可選結構(預泛型) )
在泛型之前,可以為需要的每種資料類型建立一個自訂的Optional*結構作為可選處理。
type OptionalString struct { Defined bool Value *string }
type Payload struct { SomeField1 string `json:"somefield1"` SomeField2 OptionalString `json:"somefield2"` }
透過使用這些技術,開發人員可以輕鬆辨別JSON 欄位是否明確設定為null 或輸入資料中不存在,從而提供更大的靈活性和對資料的控制驗證和處理。
以上是Go 中如何區分 JSON 空值和缺失欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!