GoでJSONをPretty Printする方法
Grace Collins
Solutions Engineer · Leapcell

Key Takeaways
json.MarshalIndent
を使用して、Goのデータ構造を読みやすいJSONに整形します。json.Indent
は、既存のJSON文字列をpretty printするために使用できます。json.Encoder
は、メモリ効率の良い方法でJSON出力を整形します。
Goにおいて、JSONの「pretty printing」とは、JSONデータをインデントと改行で整形し、可読性を高めることを指します。これは、ログやコンソール出力でJSONを表示する際に特に便利です。Goの標準ライブラリは、encoding/json
パッケージを通じてこれをサポートしています。
json.MarshalIndent
を使ってJSONをPretty Printする
encoding/json
パッケージは、MarshalIndent
関数を提供し、Goのデータ構造をインデント付きのJSONにシリアライズします。以下に使用方法を示します。
package main import ( "encoding/json" "fmt" ) func main() { // サンプルデータ構造 data := map[string]interface{}{ "Name": "Alice", "Age": 30, "Active": true, "Skills": []string{"Go", "Docker", "Kubernetes"}, } // pretty-printed JSONに変換 jsonData, err := json.MarshalIndent(data, "", " ") if err != nil { fmt.Println("JSONのマーシャリングエラー:", err) return } // 整形されたJSONを出力 fmt.Println(string(jsonData)) }
この例では:
data
は、サンプルデータ構造を表すマップです。json.MarshalIndent
は、data
をインデント付きのJSON形式のバイトスライスにシリアライズします。- 2番目の引数(
""
)は、各行のプレフィックスを指定します(この場合はなし)。 - 3番目の引数(
" "
)は、インデント文字列を指定します(ここでは4つのスペース)。 - 結果の
jsonData
は、文字列に変換されて出力されます。
出力は次のようになります。
{ "Active": true, "Age": 30, "Name": "Alice", "Skills": [ "Go", "Docker", "Kubernetes" ] }
既存のJSON文字列をPretty Printingする
JSON文字列があり、それをpretty printしたい場合は、json.Indent
関数を使用できます。
package main import ( "bytes" "encoding/json" "fmt" ) func main() { // 最小化されたJSON文字列 jsonString := `{"Name":"Alice","Age":30,"Active":true,"Skills":["Go","Docker","Kubernetes"]}` // 文字列をバイトスライスに変換 jsonData := []byte(jsonString) // 整形されたJSONを保持するためのバッファを作成 var prettyJSON bytes.Buffer // JSONをインデント err := json.Indent(&prettyJSON, jsonData, "", " ") if err != nil { fmt.Println("JSONのインデントエラー:", err) return } // 整形されたJSONを出力 fmt.Println(prettyJSON.String()) }
このコードでは:
jsonString
には、最小化されたJSONデータが含まれています。json.Indent
は、最小化されたJSONを読み取り、整形されたバージョンをprettyJSON
に書き込みます。- 整形されたJSONは、文字列として出力されます。
出力は前の例と同一になります。
インデント付きのjson.Encoder
の使用
あるいは、json.Encoder
を使用して、JSONをos.Stdout
などのio.Writer
に直接pretty printすることもできます。
package main import ( "encoding/json" "os" ) func main() { // サンプルデータ構造 data := map[string]interface{}{ "Name": "Alice", "Age": 30, "Active": true, "Skills": []string{"Go", "Docker", "Kubernetes"}, } // インデント付きのJSONエンコーダを作成 encoder := json.NewEncoder(os.Stdout) encoder.SetIndent("", " ") // データをエンコードして出力 err := encoder.Encode(data) if err != nil { fmt.Println("JSONのエンコードエラー:", err) } }
このアプローチは、整形されたJSONをメモリに保持せずに、出力ストリームに直接書き込みたい場合に効率的です。
結論
Goのencoding/json
パッケージは、JSONデータをpretty printするための複数のメソッドを提供し、ログやコンソール出力の可読性を高めます。json.MarshalIndent
、json.Indent
、またはインデント付きのjson.Encoder
を使用するかどうかにかかわらず、ユースケースに最適な方法を選択できます。
FAQs
json.MarshalIndent
は、Goのデータ構造をJSONに整形しますが、json.Indent
は既存のJSON文字列を再フォーマットします。
io.Writer
に直接書き込む場合に、不要なメモリ使用量を避けるためにjson.Encoder
を使用します。
はい、json.MarshalIndent
の3番目の引数でインデント文字列(スペースやタブなど)を指定します。
Leapcellをご紹介します。GoプロジェクトをホストするならLeapcellが最適です。
Leapcellは、次世代のサーバーレスプラットフォームで、Webホスティング、非同期タスク、Redisに対応しています。
多言語サポート
- Node.js、Python、Go、Rustで開発できます。
無制限のプロジェクトを無料でデプロイ
- 使用量に応じてのみ料金が発生し、リクエストや料金は発生しません。
比類のないコスト効率
- アイドル料金なしの従量課金制。
- 例:25ドルで、平均応答時間60msで694万リクエストをサポートします。
合理化された開発者体験
- 直感的なUIで簡単にセットアップできます。
- 完全に自動化されたCI/CDパイプラインとGitOps統合。
- 実行可能なインサイトを得るためのリアルタイムのメトリクスとロギング。
簡単なスケーラビリティと高性能
- 自動スケーリングにより、高い同時実行性を容易に処理できます。
- 運用上のオーバーヘッドはゼロで、構築に集中できます。
詳細については、ドキュメントをご覧ください。
Xでフォローしてください:@LeapcellHQ