ホームページ >バックエンド開発 >Golang >sql.NullString を含む Go 構造体からの JSON 出力をフラット化する方法

sql.NullString を含む Go 構造体からの JSON 出力をフラット化する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-02 19:20:13688ブラウズ

How to Flatten JSON Output from a Go struct containing sql.NullString?

平坦化された出力の sql.NullString のマーシャリング

問題

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"
}

Solution

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

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