
區分在解組期間設定為Null 和不存在的JSON 欄位
將JSON 解組到Golang 結構體時,區分設定為null 的欄位不存在的欄位可能至關重要。這兩種情況都會導致結構體中出現 nil 值,從而模糊了預期的語意。
使用泛型進行區分(Go 1.18 )
Go 1.18 引入了泛型,透過以下方式實現了簡潔的解決方案單一泛型類型:
1 2 3 4 | type Optional[T any] struct {
Defined bool
Value *T
}
|
登入後複製
此類型封裝了具有已定義欄位狀態(已定義)的可選值的概念。
用法範例:
1 2 3 4 | type Payload struct {
Field1 Optional[string] `json: "field1" `
Field2 Optional[int] `json: "field2" `
}
|
登入後複製
解組後,定義值的欄位(已定義== true )可以區分空值(Value == nil )和缺失值(Defined == false)。
預泛型解
自訂型別包裝器:
1 2 3 4 5 6 7 8 9 | type OptionalString struct {
Defined bool
Value *string
}
func (os *OptionalString) UnmarshalJSON(data []byte) error {
os.Defined = true
return json.Unmarshal(data, &os.Value)
}
|
登入後複製
1 2 3 4 | type Payload struct {
Field1 string `json: "field1" `
Field2 OptionalString `json: "field2" `
}
|
登入後複製
限制:
每個支援的類型都需要一個專用的結構包裝器(例如,數字類型的OptionalNumber)。 - 沒有提供null和missing之間的全面區分價值。
-
以上是在 Go 中解組時如何區分 JSON 空值和缺失欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!