JSONをGo Structに変換する方法
James Reed
Infrastructure Engineer · Leapcell

Key Takeaways
- structフィールドタグ(
json:"field"
)を使用して、JSONキーをGoのstructフィールドにマッピングします。 json.Unmarshal
を使用してJSONをstructにデコードし、json.Marshal
を使用してエンコードします。- ネストされたGoのstructを定義して、ネストされたJSON構造を処理します。
JSON(JavaScript Object Notation)は、データ交換に広く使用されている形式であり、Go(またはGolang)はJSONの操作を強力にサポートしています。JSONデータをGoのstructに変換することで、型安全性が向上し、データ処理が改善されます。この記事では、JSONをGoのstructに効率的に変換する方法について説明します。
GoのStructの定義
JSONを解析する前に、JSON構造に対応するGoのstructが必要です。次のJSONの例を検討してください。
{ "name": "Alice", "age": 25, "email": "alice@example.com" }
対応するGoのstructは、適切なフィールド名と型で定義する必要があります。
type Person struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email"` }
structフィールドタグ(例:json:"name"
)は、JSONキーをstructフィールドにマッピングします。
JSONからStructへの解析
Goのencoding/json
パッケージは、JSONをstructに解析する関数を提供します。JSONをGoのstructにデコードする方法を次に示します。
package main import ( "encoding/json" "fmt" ) func main() { jsonData := `{"name": "Alice", "age": 25, "email": "alice@example.com"}` var person Person err := json.Unmarshal([]byte(jsonData), &person) if err != nil { fmt.Println("Error parsing JSON:", err) return } fmt.Println("Parsed Struct:", person) }
StructからJSONへのエンコード
json.Marshal
を使用して、GoのstructをJSON文字列に変換することもできます。
encodedData, err := json.Marshal(person) if err != nil { fmt.Println("Error encoding JSON:", err) return } fmt.Println("JSON Output:", string(encodedData))
ネストされたJSON構造の処理
JSONにネストされたオブジェクトが含まれている場合は、対応するネストされたstructを定義します。
{ "name": "Alice", "contact": { "email": "alice@example.com", "phone": "123-456-7890" } }
対応するGoのstructは次のようになります。
type Contact struct { Email string `json:"email"` Phone string `json:"phone"` } type Person struct { Name string `json:"name"` Contact Contact `json:"contact"` }
部分的な解析のためのjson.RawMessage
の使用
特定のJSONフィールドの解析を延期する必要がある場合は、json.RawMessage
を使用します。
type Data struct { Info json.RawMessage `json:"info"` }
結論
JSONからGoのstructへの変換は、Goアプリケーションで構造化データを処理するために不可欠です。適切なstruct型を定義し、json.Unmarshal
とjson.Marshal
を使用し、json.RawMessage
のような機能を活用することで、GoでJSONデータを効率的に管理できます。
FAQs
対応するstructフィールドには、そのゼロ値(たとえば、文字列の場合は""
、整数の場合は0
)が設定されます。
json:"-"
タグを使用して、JSONのシリアル化とデシリアル化からフィールドを除外します。
はい、柔軟なJSON処理にはmap[string]interface{}
またはjson.RawMessage
を使用します。
GoプロジェクトのホスティングにはLeapcellをお選びください。
Leapcellは、Webホスティング、非同期タスク、およびRedisのための次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、またはRustで開発します。
無制限のプロジェクトを無料でデプロイ
- 使用量に応じてのみ支払い — リクエストも料金もありません。
比類のない費用効率
- アイドル料金なしの従量課金制。
- 例:25ドルで、平均応答時間60msで694万リクエストをサポートします。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI/CDパイプラインとGitOps統合。
- 実用的な洞察のためのリアルタイムのメトリックとロギング。
簡単なスケーラビリティと高性能
- 高い同時実行性を容易に処理するための自動スケーリング。
- 運用上のオーバーヘッドはゼロ — 構築に集中するだけです。
詳細については、ドキュメントをご覧ください。
Xでフォローしてください:@LeapcellHQ