sql.NullString を含む Go 構造体を指定すると、encoding/json を使用して構造体をマーシャリングすると、次の結果が生成されます。目的のフラット化されたオブジェクトの代わりにネストされたオブジェクトvalue.
type Company struct { ID int `json:"id"` Abn sql.NullString `json:"abn,string"` }
たとえば、このような構造体をマーシャリングすると、次のような出力が生成されます。
{ "id": "68", "abn": { "String": "SomeABN", "Valid": true } }
ただし、目的の出力はフラット化されます。
{ "id": "68", "abn": "SomeABN" }
新しい型を定義して NullString 型の 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"` }
json.Marshaler インターフェイスを実装することにより、MyNullString 型は JSON として表現される方法を制御できます。 null 以外の場合は基になる文字列を返し、null 値の場合はリテラルの「null」文字列を返します。
コード プレイグラウンドで提供される例は、目的の動作を示しています。
https://play.golang.org/p/Ak_D6QgIzLb
このソリューションは、Valid フィールドを無視し、文字列値を直接返すことによって出力を平坦化します。
以上がsql.NullString を含む Go 構造体からの JSON 出力をフラット化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。