複数の JSON タグを使用したマーシャリングとアンマーシャリング
JSON データを構造体にアンマーシャリングする場合、各フィールドにはそのフィールドを指定するための対応する JSON タグが必要です。対応する JSON キー。ただし、同じデータで異なる JSON タグを持つ新しい JSON ファイルを作成する必要がある場合があります。
あなたの場合、JSON {"name":"Sam","age": をアンマーシャリングしたいと考えています。 20} を構造体 Foo に追加し、employee_name と - のタグを含む変更バージョンを作成して別のサーバーに送信します。
ただし、複数の JSON タグを構造体 Foo に割り当てると便利です。あなたが提案した単一フィールドですが、これはGoのencoding/jsonパッケージ内ではサポートされていません。代わりに、エクスポートされていない型とキャストを利用することで、目的の結果を得ることができます。
package main import ( "bytes" "encoding/json" ) type Foo struct { Name string `json:"name"` Age int `json:"age"` } func main() { data := []byte(`{"name":"Sam","age":20}`) // Unmarshal to Foo var foo Foo json.Unmarshal(data, &foo) // Create a new type with modified tags type Bar struct { Name string `json:"employee_name"` Age int `json:"-"` } // Cast from Foo to Bar bar := Bar(foo) // Marshal Bar buf := new(bytes.Buffer) json.NewEncoder(buf).Encode(bar) println(buf.String()) }
注: このアプローチは、エクスポートされていない型 Bar に依存しています。エクスポートされていない型を使用すると、コードベースの他の場所で誤って使用されることを防ぐことができます。さらに、キャストが正しく機能するためには、両方の構造体のフィールド名、型、順序が正確に一致していることを確認してください。
以上がGo で、あるタグ セットで JSON をアンマーシャリングし、別のタグでマーシャリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。