複数の JSON タグを含む構造体
サーバーから JSON 応答を受信し、構造体にアンマーシャリングする必要があるシナリオでは、別のサーバーに送信する前に、JSON タグを変更する必要がある場合があります。通常、これには新しい構造体を作成し、データを手動でコピーする必要があります。
ただし、単一の構造体に複数の JSON タグを定義できるかどうかを検討する価値があります。以下の例のように、構造体定義内の同じフィールドに複数のタグを直接付加する試みはサポートされていません:
type Foo struct { Name string `json:"name" json:"employee_name"` Age int `json:"age" json:"-"` }
代わりに、考えられる解決策は、同じようにレイアウトされた 2 つの構造体 (一致する) 間でキャストすることです。名前、タイプ、フィールドの順序)。このアプローチは一般に推奨されませんが、望ましい結果を達成するために慎重に使用できます。
type Foo struct { Name string `json:"name"` Age int `json:"age"` } type Bar struct { Name string `json:"employee_name"` // Age is not exported age int `json:"-"` } func main() { foo := Foo{} // Unmarshal JSON err := json.Unmarshal([]byte("{\"name\":\"Sam\",\"age\":20}"), &foo) if err != nil { log.Fatal(err) } // Cast between types, overwriting internal representation bar := (*Bar)(unsafe.Pointer(&foo)) // Marshal modified JSON data, err := json.Marshal(bar) if err != nil { log.Fatal(err) } // Example JSON: {"employee_name":"Sam"} fmt.Println(string(data)) }
このキャスト アプローチは慎重に使用する必要があることに注意することが重要です。特定のコンテキスト外での意図しない使用を防ぐために、2 番目の構造体をアンエクスポートする必要があります。
以上が単一の Go 構造体フィールドに対して複数の JSON タグを定義できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。