ホームページ > バックエンド開発 > Golang > Go で Null フィールドと欠落している JSON フィールドを区別するにはどうすればよいですか?

Go で Null フィールドと欠落している JSON フィールドを区別するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-30 19:35:12
オリジナル
502 人が閲覧しました

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 以降、汎用の Optional 構造体この問題に対処するために利用できます:

type Optional[T any] struct {
    Defined bool
    Value   *T
}
ログイン後にコピー

この構造体はUnmarshalJSON インターフェイス。定義済みの値と未定義の値を区別できるようにします。 JSON ペイロードをアンマーシャリングする場合、値が null であるか有効な値であるかに関係なく、Optional struct の定義されたフィールドは true に設定されます。

使用例

type Payload struct {
    Field1 Optional[string] `json:"field1"`
    Field2 Optional[bool]   `json:"field2"`
    Field3 Optional[int32]  `json:"field3"`
}
ログイン後にコピー

JSON ペイロードをアンマーシャリングした後、Defined フィールドを使用して、特定のフィールドが JSON に存在するかどうかを判断できます。

Go 1.18 より前のソリューション

Go の 1.18 より前のバージョンでは、同じ結果を達成するためにカスタム タイプを作成できます。

type OptionalString struct {
    Defined bool
    Value   *string
}
ログイン後にコピー

Go 1.18 の Optional struct と同様に、この型は UnmarshalJSON を実装します。

使用例

type Payload struct {
    SomeField1 string         `json:"somefield1"`
    SomeField2 OptionalString `json:"somefield2"`
}
ログイン後にコピー

このカスタム タイプを利用することで、Defined フィールドを検査して null と非既存のフィールド。

以上がGo で Null フィールドと欠落している JSON フィールドを区別するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート