JSON マーシャリング中の sql.NullString 出力の平坦化
sql.NullString フィールドを含む Go 構造体をマーシャリングする場合、デフォルトの出力にはフィールドの有効なプロパティと文字列プロパティ。値のみを含むフラット化された出力を実現するには、追加の手順を実行する必要があります。
次の構造体について考えます。
type Company struct { ID int `json:"id"` Abn sql.NullString `json:"abn,string"` }
この構造体を json.Marshal でマーシャリングすると、次のような出力が生成されます。 :
{ "id": "68", "abn": { "String": "SomeABN", "Valid": true } }
カスタム用に sql.NullString を拡張JSON マーシャリング
この出力をフラット化するには、sql.NullString を拡張し、json.Marshaler を実装する必要があります。
type NullString sql.NullString func (x *NullString) MarshalJSON() ([]byte, error) { if !x.Valid { x.Valid = true x.String = "" //return []byte("null"), nil } return json.Marshal(x.String) }
フラット化された出力のカスタム タイプを定義する
次に、拡張されたデータを埋め込むカスタム型を定義します。 NullString を実装し、json.Marshaler.
type MyNullString struct { 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"` }
このカスタム型を使用すると、マーシャリングされた出力は次のようになります。
{ "id": "68", "abn": "SomeABN" }
以上がGoでJSONをマーシャリングするときにsql.NullString出力をフラット化する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。