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

Go でアンマーシャリングするときに JSON Null フィールドと欠落フィールドを区別するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-03 21:03:17
オリジナル
455 人が閲覧しました

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

アンマーシャリング中に Null に設定された JSON フィールドと存在しない JSON フィールドを区別する

JSON を Golang 構造体にアンマーシャリングするとき、null に設定されたフィールド間の区別存在しないフィールドが重要になる可能性があります。どちらのシナリオでも構造体に nil 値が含まれ、意図したセマンティクスがわかりにくくなります。

ジェネリックを使用した区別 (Go 1.18)

Go 1.18 ではジェネリックが導入され、次のような簡潔なソリューションが可能になります。単一のジェネリック型:

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

This type は、定義されたフィールドの状態 (Defined) を持つオプションの値の概念をカプセル化します。

使用例:

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

アンマーシャリング後、定義された値を持つフィールド (Defined) == true) は、null 値 (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 と欠落の包括的な区別は提供されません値。

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

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