Go 型変換による SQL NULL 値の JSON 処理
Int64 や String などの Go 型は null 値を格納できませんが、sql.NullInt64 を使用します。 sql.NullString ではこの機能が可能です。ただし、json パッケージを使用してこれらの型を JSON としてエンコードすると、通常の Int64 型や String 型と比較して形式が変更されます。
この矛盾は、sql.Null* 型自体が構造体であるために発生します。 JSON 表現における追加レベルのネスト。これを克服するには、json.Marshaller インターフェイスと json.Unmarshaler インターフェイスに準拠したカスタム型を実装できます。
たとえば、JsonNullInt64 型を定義して、sql.NullInt64 型を埋め込み、カスタム JSON 処理を実装できます。
type JsonNullInt64 struct { sql.NullInt64 } func (v JsonNullInt64) MarshalJSON() ([]byte, error) { if v.Valid { return json.Marshal(v.Int64) } else { return json.Marshal(nil) } } func (v *JsonNullInt64) UnmarshalJSON(data []byte) error { // Pointer unmarshalling ensures NULL detection var x *int64 if err := json.Unmarshal(data, &x); err != nil { return err } if x != nil { v.Valid = true v.Int64 = *x } else { v.Valid = false } return nil }
置換sql.NullInt64 と JsonNullInt64 を組み合わせると、目的の JSON エンコードが得られます。さらに詳しいテストについては、このプレイグラウンドを参照してください: http://play.golang.org/p/zFESxLcd-c
以上がGo 型変換を使用して JSON 内の SQL NULL 値を処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。