Golang JSONタグの理解
Emily Parker
Product Engineer · Leapcell

Key Takeaways
- Golang JSONタグは、構造体フィールドがどのようにシリアル化およびデシリアル化されるかを制御します。
omitempty
や-
のようなオプションは、JSON出力へのフィールドの包含を修正します。string
オプションは、数値フィールドとブールフィールドを文字列としてシリアル化するように強制します。
Goでは、構造体タグはJSONデータのエンコードとデコードを制御する上で重要な役割を果たします。json
タグを活用することで、開発者は構造体フィールドがJSONキーにどのようにマッピングされるかをカスタマイズでき、シリアル化(マーシャリング)とデシリアル化(アンマーシャリング)の両方のプロセスに影響を与えます。
JSONタグの基本的な使い方
次の構造体の定義を考えてみましょう。
type Person struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email,omitempty"` }
ここで、構造体タグは各フィールドに対応するJSONキー名を指定します。
Name
は"name"
にマッピングされます。Age
は"age"
にマッピングされます。Email
は"email"
にマッピングされますが、omitempty
オプションが含まれています。
omitempty
オプションは、Email
フィールドが空の場合(つまり、ゼロ値の場合)、JSON出力から省略されることを保証します。
シリアル化中にフィールドを無視する
JSONシリアル化から構造体フィールドを除外するには、-
タグを使用します。
type Person struct { Name string `json:"name"` Age int `json:"age"` Secret string `json:"-"` }
この例では、Secret
フィールドはマーシャリングとアンマーシャリングの両方で無視されます。
omitempty
を使用した空の値の処理
omitempty
タグオプションは、ゼロ値を持つフィールドがJSON出力に表示されないようにします。
type Person struct { Name string `json:"name"` Age int `json:"age,omitempty"` Email *string `json:"email,omitempty"` }
Age
が0
またはEmail
がnil
の場合、これらのフィールドはシリアル化されたJSONから省略されます。
string
タグオプションの使用
string
オプションは、エンコーダーに数値またはブールフィールドをJSON文字列としてシリアル化するように指示します。
type Person struct { ID int `json:"id,string"` Name string `json:"name"` Active bool `json:"active,string"` }
ここで、ID
とActive
はJSON出力で文字列として表現されます。
複数のタグとリフレクション
Goは、さまざまな目的のために複数のタグをサポートしています。
type Person struct { Name string `json:"name" xml:"name"` Age int `json:"age" xml:"age"` }
リフレクションを使用すると、実行時にこれらのタグを取得できます。
t := reflect.TypeOf(Person{}) field, _ := t.FieldByName("Name") jsonTag := field.Tag.Get("json") xmlTag := field.Tag.Get("xml")
結論
Goの構造体でJSONタグを理解して利用することで、JSONのシリアル化とデシリアル化を正確に制御でき、Goアプリケーションと他のシステム間のシームレスなデータ交換が容易になります。
詳細な例と高度な使用法については、公式のGoドキュメントとコミュニティリソースを参照してください。
FAQs
フィールド名は、キャメルケースのデフォルトのJSONキーとして使用されます。
はい、さまざまなエンコード形式に複数の構造体タグを使用できます。
json:"-"
を使用して、フィールドがJSON出力に含まれないようにします。
Leapcellは、Goプロジェクトをホストするための最良の選択肢です。
Leapcellは、ウェブホスティング、非同期タスク、Redisのための次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、またはRustで開発できます。
無制限のプロジェクトを無料でデプロイ
- 使用量に応じてのみ料金が発生します - リクエストも料金もかかりません。
圧倒的なコスト効率
- アイドル料金なしの従量課金制。
- 例:25ドルで、平均応答時間60msで694万リクエストをサポートします。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI/CDパイプラインとGitOps統合。
- 実用的な洞察を得るためのリアルタイムのメトリクスとロギング。
簡単なスケーラビリティと高性能
- 高い同時実行性を簡単に処理するための自動スケーリング。
- 運用上のオーバーヘッドはゼロ - 構築に集中するだけです。
詳細については、ドキュメントをご覧ください!
Xでフォローしてください:@LeapcellHQ