ホームページ > バックエンド開発 > Golang > Goでsql.NullString JSON出力をフラット化する方法?

Goでsql.NullString JSON出力をフラット化する方法?

Patricia Arquette
リリース: 2024-12-03 00:19:12
オリジナル
984 人が閲覧しました

How to Flatten sql.NullString JSON Output in Go?

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

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