首頁 > 後端開發 > Golang > 如何區分 Go 中的 Null 和缺失 JSON 欄位?

如何區分 Go 中的 Null 和缺失 JSON 欄位?

Barbara Streisand
發布: 2024-11-30 19:35:12
原創
410 人瀏覽過

How Can I Differentiate Between Null and Missing JSON Fields in Go?

區分Go 中的Null 和不存在的JSON 字段

將JSON 解組到Go 結構體時,區分JSON 字段可能具有挑戰性明確設定為null 的以及JSON 負載中根本不存在的。這種區別在許多場景中至關重要,因為它會影響資料的語義及其解釋。

Go 1.18 解

從Go 1.18 開始,一個通用的可選結構體可以用來解決這個問題:

type Optional[T any] struct {
    Defined bool
    Value   *T
}
登入後複製

這個結構實作了UnmarshalJSON接口,允許它區分已定義和未定義的值。解組 JSON 負載時,無論該值是 null 還是有效值,Optional 結構的定義欄位都會設為 true。

範例用法

type Payload struct {
    Field1 Optional[string] `json:"field1"`
    Field2 Optional[bool]   `json:"field2"`
    Field3 Optional[int32]  `json:"field3"`
}
登入後複製

解組 JSON 有效負載後,定義的欄位可用於確定 JSON 中是否存在特定欄位或不是。

Go 1.18 之前的解決方案

對於 1.18 之前的 Go 版本,可以建立自訂類型來實現相同的結果。

type OptionalString struct {
    Defined bool
    Value   *string
}
登入後複製

與Go 1.18中的Optional結構類似,此類型實作了UnmarshalJSON介面相應地設定已定義欄位。

用法範例

type Payload struct {
    SomeField1 string         `json:"somefield1"`
    SomeField2 OptionalString `json:"somefield2"`
}
登入後複製

透過使用此自訂類型,可以檢查已定義欄位以區分空白欄位和不存在欄位.

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

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