カテゴリ: C# 更新日: 2026/03/05

C#でJSONを整形して出力する方法!System.Text.Jsonで読みやすく保存

C#でJSONのフォーマットを整形する方法(Indented出力)
C#でJSONのフォーマットを整形する方法(Indented出力)

先生と生徒の会話形式で理解しよう

生徒

「C#で作ったデータを保存したいのですが、JSONという形式にすると中身が一行に繋がってしまって、人間にはとても読みづらいです。綺麗に並べる方法はありますか?」

先生

「それはインデント(字下げ)の設定が必要ですね。C#の標準機能を使えば、数行のコードを追加するだけで、誰が見ても分かりやすい形式に整えることができますよ。」

生徒

「インデント設定をすれば、メモ帳で開いたときもスッキリ見えるようになるんですね!どうやって書けばいいのか教えてください!」

先生

「もちろんです。初心者の方でもすぐに使えるように、基本的な手順から丁寧に解説していきますね!」

1. JSONとは何かを学ぼう

1. JSONとは何かを学ぼう
1. JSONとは何かを学ぼう

プログラミングの世界では、データを保存したり、別のコンピュータへ送ったりする際に「JSON(ジェイソン)」という形式がよく使われます。JSONは「JavaScript Object Notation」の略称ですが、現在はC#やPythonなど、あらゆるプログラミング言語で共通して使われる非常に便利なデータの書き方です。

例えば、名前や年齢、趣味などの情報をひとまとめにして扱うことができます。しかし、コンピュータが処理しやすいように書き出すと、全ての文字が隙間なく横一行に並んでしまうことがあります。これを「整形されていない状態」と呼びます。人間が内容を確認したり、設定ファイルを自分で書き換えたりする場合には、段落がついた読みやすい状態(整形された状態)にする必要があります。

2. シリアライズとインデントの仕組み

2. シリアライズとインデントの仕組み
2. シリアライズとインデントの仕組み

C#のプログラムで扱っているデータ(オブジェクト)を、JSONという文字列に変換することを「シリアライズ」と呼びます。逆に、JSON文字列をプログラムで使える形式に戻すことを「デシリアライズ」と呼びます。

今回のテーマである「整形」は、このシリアライズを行う際に、「見やすく隙間(スペース)を入れてくださいね」とコンピュータにお願いする作業のことです。この隙間のことをプログラミング用語で「インデント(字下げ)」と言います。インデントがあることで、データの親子関係が一目で分かるようになります。

3. 最も標準的なSystem.Text.Jsonの使い方

3. 最も標準的なSystem.Text.Jsonの使い方
3. 最も標準的なSystem.Text.Jsonの使い方

現在のC#において、最も一般的で推奨されているのが「System.Text.Json」というライブラリを使う方法です。これはマイクロソフトが公式に提供しているもので、追加のインストールなしですぐに使い始めることができます。

まずは、何も設定せずに書き出した場合のコードを見てみましょう。実行結果が一行になっていることに注目してください。


using System;
using System.Text.Json;

public class User
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        var user = new User { Name = "田中太郎", Age = 25 };
        
        // 普通にシリアライズすると一行になる
        string jsonString = JsonSerializer.Serialize(user);
        
        Console.WriteLine(jsonString);
    }
}

このコードを実行すると、次のような結果になります。


{"Name":"\u7530\u4E2D\u592A\u90CE","Age":25}

これでは少し読みづらいですね。日本語も記号のようになってしまっています。

4. WriteIndentedオプションで見た目を整える

4. WriteIndentedオプションで見た目を整える
4. WriteIndentedオプションで見た目を整える

次に、本題である「整形(Indented出力)」を行う方法を解説します。C#では「JsonSerializerOptions」というクラスを使って、シリアライズの方法を細かく指定できます。その中にある「WriteIndented」という設定を「true(有効)」にするだけで、綺麗な見た目になります。


using System;
using System.Text.Json;

public class Product
{
    public string ItemName { get; set; }
    public int Price { get; set; }
}

class Program
{
    static void Main()
    {
        var product = new Product { ItemName = "高級なリンゴ", Price = 500 };

        // オプションを作成して、整形を有効にする
        var options = new JsonSerializerOptions
        {
            WriteIndented = true // ここが重要!
        };

        string prettyJson = JsonSerializer.Serialize(product, options);
        
        Console.WriteLine(prettyJson);
    }
}

実行結果は以下のようになります。


{
  "ItemName": "\u9AD8\u7D1A\u306A\u30EA\u30F3\u30B4",
  "Price": 500
}

格段に見やすくなりましたね。このように、波括弧や項目ごとに改行が入る形式を「インデント出力」と呼びます。

5. 日本語の文字化け(エンコード)を解決する

5. 日本語の文字化け(エンコード)を解決する
5. 日本語の文字化け(エンコード)を解決する

先ほどの実行結果を見て、「日本語が変な記号になっている!」と驚いたかもしれません。これはコンピュータが日本語を安全に扱うために、特殊な符号(エスケープ)に変換しているためです。これも設定一つで解決できます。「JavaScriptEncoder.UnsafeRelaxedJsonEscaping」を指定することで、日本語をそのまま表示できるようになります。


using System;
using System.Text.Json;
using System.Text.Encodings.Web;
using System.Text.Unicode;

class Program
{
    static void Main()
    {
        var data = new { Message = "こんにちは!C#の世界へようこそ。" };

        var options = new JsonSerializerOptions
        {
            WriteIndented = true,
            // 日本語をそのまま出力するための設定
            Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
        };

        string json = JsonSerializer.Serialize(data, options);
        Console.WriteLine(json);
    }
}

このコードを使うと、人間にとって完璧に読みやすいJSONが完成します。


{
  "Message": "こんにちは!C#の世界へようこそ。"
}

6. リストや配列を整形して表示する例

6. リストや配列を整形して表示する例
6. リストや配列を整形して表示する例

データが複数ある場合(リストや配列)は、整形機能がさらに威力を発揮します。複数のデータが横に長く並ぶと、どこからが新しいデータなのか判断するのが難しくなりますが、インデントがあれば一目瞭然です。


using System;
using System.Collections.Generic;
using System.Text.Json;

class Program
{
    static void Main()
    {
        var fruits = new List<string> { "リンゴ", "バナナ", "オレンジ" };

        var options = new JsonSerializerOptions { WriteIndented = true };

        string json = JsonSerializer.Serialize(fruits, options);
        Console.WriteLine(json);
    }
}

実行結果は以下の通りです。縦に綺麗に並んでいるので、データの個数も数えやすいですね。


[
  "\u30EA\u30F3\u30B4",
  "\u30D0\u30CA\u30CA",
  "\u30AA\u30EC\u30F3\u30B8"
]

7. XMLからJSONへの変換と整形の応用

7. XMLからJSONへの変換と整形の応用
7. XMLからJSONへの変換と整形の応用

古いシステムではXMLという形式が使われていることもあります。XMLを読み込んで解析し、それをJSONとして整形して保存し直すといった作業も、C#では頻繁に行われます。基本的には、どのような形式であっても、一度C#のクラスやオブジェクトに読み込んでしまえば、あとは先ほど紹介した「JsonSerializerOptions」を使って自在に整形することが可能です。

プログラミング初心者の方は、まずは「データの保存=JSON」「見やすくする=WriteIndented」という二つの言葉をセットで覚えておくと、今後の開発がスムーズに進むでしょう。特にデバッグ(プログラムのミスを探す作業)において、整形されたデータは大きな助けになります。

8. 開発環境での便利なテクニック

8. 開発環境での便利なテクニック
8. 開発環境での便利なテクニック

プログラムの中で整形するだけでなく、Visual Studioなどの開発ツール自体にもJSONを整える機能が備わっています。コードを貼り付けるだけで自動的に綺麗にしてくれるサイトもありますが、プログラム内で自動的に整形してファイルに保存できるようにしておくのがプロへの第一歩です。今回の知識を活用して、自分自身のアプリケーションで生成するログファイルや設定ファイルを、誰が見ても美しい状態に保てるように心がけましょう。

カテゴリの一覧へ
新着記事
New1
C#
C#でXMLを扱う基本!XmlDocumentの使い方と読み込み・保存を徹底解説
New2
C#
C#で日付操作の落とし穴と注意点を解説|初心者向けにわかりやすく丁寧に解説
New3
COBOL
COBOLのソース管理ツール(Git・SVN)の基本を完全解説!初心者でもわかるバージョン管理入門
New4
C#
C#でタイムスタンプの精度を上げるためのテクニックを徹底解説!(初心者向け)
人気記事
No.1
Java&Spring記事人気No1
C#
C#のLINQでFirstとFirstOrDefaultの違いと使い方を完全解説!初心者向けガイド
No.2
Java&Spring記事人気No2
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.3
Java&Spring記事人気No3
C#
C#のstaticクラスとstaticメソッドの基本と使い方をやさしく解説!
No.4
Java&Spring記事人気No4
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.5
Java&Spring記事人気No5
C#
C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう
No.6
Java&Spring記事人気No6
C#
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.7
Java&Spring記事人気No7
COBOL
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法
No.8
Java&Spring記事人気No8
C#
C#のCancellationTokenを使ったキャンセル処理を完全ガイド!非同期処理を安全に止める方法