首頁 >後端開發 >Golang >在 Go 中解組時如何區分 JSON 空值和缺失欄位?

在 Go 中解組時如何區分 JSON 空值和缺失欄位?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-03 21:03:17454瀏覽

How Can I Distinguish Between JSON Null and Missing Fields When Unmarshaling in Go?

區分在解組期間設定為Null 和不存在的JSON 欄位

將JSON 解組到Golang 結構體時,區分設定為null 的欄位不存在的欄位可能至關重要。這兩種情況都會導致結構體中出現 nil 值,從而模糊了預期的語意。

使用泛型進行區分(Go 1.18 )

Go 1.18 引入了泛型,透過以下方式實現了簡潔的解決方案單一泛型類型:

type Optional[T any] struct {
    Defined bool
    Value   *T
}

此類型封裝了具有已定義欄位狀態(已定義)的可選值的概念。

用法範例:

type Payload struct {
    Field1 Optional[string] `json:"field1"`
    Field2 Optional[int]   `json:"field2"`
}

解組後,定義值的欄位(已定義== true )可以區分空值(Value == nil )和缺失值(Defined == false)。

預泛型解

自訂型別包裝器:

type OptionalString struct {
    Defined bool
    Value   *string
}

func (os *OptionalString) UnmarshalJSON(data []byte) error {
    os.Defined = true
    return json.Unmarshal(data, &os.Value)
}

type Payload struct {
    Field1 string         `json:"field1"`
    Field2 OptionalString `json:"field2"`
}

限制:

    每個支援的類型都需要一個專用的結構包裝器(例如,數字類型的OptionalNumber)。
  • 沒有提供null和missing之間的全面區分價值。

以上是在 Go 中解組時如何區分 JSON 空值和缺失欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn