フラット化された sql.NullString 出力のカスタム マーシャリング
json.Marshal を使用して Go 構造体の sql.NullString フィールドをマーシャリングする場合、デフォルト出力には、Valid フィールドや String フィールドなどの追加のメタデータが含まれます。この動作は、フラット化された値が優先される特定のシナリオでは望ましくない場合があります。
次の構造体を考慮してください:
type Company struct { ID int `json:"id"` Abn sql.NullString `json:"abn,string"` }
この構造体をマーシャリングすると、結果は次のようになります:
{ "id": "68", "abn": { "String": "SomeABN", "Valid": true } }
ただし、望ましい結果は、 value:
{ "id": "68", "abn": "SomeABN" }
カスタム マーシャラーの実装
これを実現するには、sql.NullString を埋め込み、json.Marshaler インターフェイスを実装するカスタム タイプを実装する必要があります。 。このカスタム タイプは、MarshalJSON メソッドを通じて独自のマーシャリング動作を定義できます。
例を次に示します。
type MyNullString struct { sql.NullString } func (s MyNullString) MarshalJSON() ([]byte, error) { if s.Valid { return json.Marshal(s.String) } return []byte(`null`), nil } type Company struct { ID int `json:"id"` Abn MyNullString `json:"abn,string"` }
カスタム MyNullString タイプを使用すると、マーシャリングで目的のフラット化された結果が生成されます。
company := &Company{} company.ID = 68 company.Abn.String = "SomeABN" result, err := json.Marshal(company)
{ "id": "68", "abn": "SomeABN" }
以上がGoでsql.NullString JSON出力をフラット化する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。