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

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

Mary-Kate Olsen
發布: 2024-12-03 21:03:17
原創
478 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板