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 サイトの他の関連記事を参照してください。