sql.NullString フィールドを持つ Golang 構造体を指定すると、デフォルトのマーシャリング動作は次のようになります。フィールドが文字列キーと有効なキーを持つ JSON オブジェクト内にネストされている出力。 NullString の値のみを含むフラット化された出力を実現するには、次の手順に従います。
1.カスタム タイプの定義:
sql.NullString を埋め込み、json.Marshaler インターフェイスを実装するカスタム タイプを作成します。
type MyNullString struct { sql.NullString }
2. MarshalJSON メソッドを実装します。
MyNullString 内に、カスタム JSON マーシャリング動作を提供する MarshalJSON メソッドを実装します。
func (s MyNullString) MarshalJSON() ([]byte, error) { if s.Valid { return json.Marshal(s.String) } return []byte(`null`), nil }
3.構造体を変更します:
フラット化が必要な構造体のフィールドにカスタム MyNullString 型を使用します。
type Company struct { ID int `json:"id"` Abn MyNullString `json:"abn,string"` }
例:
package main import ( "database/sql" "encoding/json" "log" ) 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"` } func main() { company := Company{ ID: 68, Abn: MyNullString{String: "SomeABN", Valid: true}, } result, err := json.Marshal(company) if err != nil { log.Fatal(err) } // Output: {"id":68,"abn":"SomeABN"} log.Println(string(result)) }
これらの手順に従うことで、出力を効果的に平坦化できます。 sql.NullString フィールドを検索し、マーシャリングされた JSON 内の値のみを取得します。
以上がGoでマーシャリングされたsql.NullStringの出力をフラット化する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。