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

GoでJSONをマーシャリングするときにsql.NullString出力をフラット化する方法?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-30 02:18:10244ブラウズ

How to Flatten sql.NullString Output When Marshaling JSON in Go?

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。