ホームページ > バックエンド開発 > Golang > Go 型変換を使用して JSON 内の SQL NULL 値を処理する方法は?

Go 型変換を使用して JSON 内の SQL NULL 値を処理する方法は?

Susan Sarandon
リリース: 2024-12-22 01:31:18
オリジナル
364 人が閲覧しました

How to Handle SQL NULL Values in JSON using Go Type Conversions?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート