GoのJSON構造体タグの理解

Goのjson構造体タグを深く解説します。フィールド命名、omitempty、stringオプション、フィールド無視のためのダッシュなど、JSONシリアライゼーション制御に必須の知識です。

Struct Tags

詳細な説明

GoのJSON構造体タグの解説

構造体タグは、GoがJSONのシリアライゼーションとデシリアライゼーションを制御するための主要なメカニズムです。json タグはフィールド型の後にバッククォート内に配置されます。

タグの構文

type Config struct {
    Name     string `json:"name"`
    Version  int    `json:"version"`
    Debug    bool   `json:"debug,omitempty"`
    Internal string `json:"-"`
    Count    string `json:"count,string"`
}

タグオプション

オプション 意味
json:"name" このフィールドをJSONキー "name" にマッピング
json:"name,omitempty" フィールドがゼロ値の場合、出力から省略
json:"-" マーシャル/アンマーシャル時に常にこのフィールドを無視
json:"count,string" 数値やboolをJSON文字列としてエンコード/デコード
json:",omitempty" フィールド名をそのまま使用するが、空の場合は省略

タグが重要な理由

タグがない場合、GoはフィールドフィールドをJSONキーとして直接使用します。Goフィールドはエクスポートされる(大文字)必要があるため、JSON出力で "name" の代わりに "Name" が得られます。タグにより、消費または生成するAPIの正確な大文字小文字と命名に一致させることができます。

string オプション

一部のAPIは数値を文字列として送信します:"count": "42"string オプションはこれを透過的に処理します:

Count int `json:"count,string"`

これにより、encoding/json はJSON文字列を期待し、その中の数値をパースします。

オプションの組み合わせ

omitemptystring を組み合わせることができます:

Price float64 `json:"price,omitempty,string"`

構造体タグの理解は、GoでのJSON処理の正確さに不可欠です。Goの型システムと柔軟なJSONの世界を橋渡しする役割を果たします。

ユースケース

JSON APIと対話するすべてのGoプロジェクトは構造体タグを必要とします。フィールド名をAPIコントラクトに一致させ、内部フィールドを隠し、数値文字列などのエッジケースを処理するために不可欠です。

試してみる — JSON to Go Struct Converter

フルツールを開く