C#でJSONを整形して出力する方法!System.Text.Jsonで読みやすく保存
生徒
「C#で作ったデータを保存したいのですが、JSONという形式にすると中身が一行に繋がってしまって、人間にはとても読みづらいです。綺麗に並べる方法はありますか?」
先生
「それはインデント(字下げ)の設定が必要ですね。C#の標準機能を使えば、数行のコードを追加するだけで、誰が見ても分かりやすい形式に整えることができますよ。」
生徒
「インデント設定をすれば、メモ帳で開いたときもスッキリ見えるようになるんですね!どうやって書けばいいのか教えてください!」
先生
「もちろんです。初心者の方でもすぐに使えるように、基本的な手順から丁寧に解説していきますね!」
1. JSONとは何かを学ぼう
プログラミングの世界では、データを保存したり、別のコンピュータへ送ったりする際に「JSON(ジェイソン)」という形式がよく使われます。JSONは「JavaScript Object Notation」の略称ですが、現在はC#やPythonなど、あらゆるプログラミング言語で共通して使われる非常に便利なデータの書き方です。
例えば、名前や年齢、趣味などの情報をひとまとめにして扱うことができます。しかし、コンピュータが処理しやすいように書き出すと、全ての文字が隙間なく横一行に並んでしまうことがあります。これを「整形されていない状態」と呼びます。人間が内容を確認したり、設定ファイルを自分で書き換えたりする場合には、段落がついた読みやすい状態(整形された状態)にする必要があります。
2. シリアライズとインデントの仕組み
C#のプログラムで扱っているデータ(オブジェクト)を、JSONという文字列に変換することを「シリアライズ」と呼びます。逆に、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オプションで見た目を整える
次に、本題である「整形(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. 日本語の文字化け(エンコード)を解決する
先ほどの実行結果を見て、「日本語が変な記号になっている!」と驚いたかもしれません。これはコンピュータが日本語を安全に扱うために、特殊な符号(エスケープ)に変換しているためです。これも設定一つで解決できます。「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. リストや配列を整形して表示する例
データが複数ある場合(リストや配列)は、整形機能がさらに威力を発揮します。複数のデータが横に長く並ぶと、どこからが新しいデータなのか判断するのが難しくなりますが、インデントがあれば一目瞭然です。
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への変換と整形の応用
古いシステムではXMLという形式が使われていることもあります。XMLを読み込んで解析し、それをJSONとして整形して保存し直すといった作業も、C#では頻繁に行われます。基本的には、どのような形式であっても、一度C#のクラスやオブジェクトに読み込んでしまえば、あとは先ほど紹介した「JsonSerializerOptions」を使って自在に整形することが可能です。
プログラミング初心者の方は、まずは「データの保存=JSON」「見やすくする=WriteIndented」という二つの言葉をセットで覚えておくと、今後の開発がスムーズに進むでしょう。特にデバッグ(プログラムのミスを探す作業)において、整形されたデータは大きな助けになります。
8. 開発環境での便利なテクニック
プログラムの中で整形するだけでなく、Visual Studioなどの開発ツール自体にもJSONを整える機能が備わっています。コードを貼り付けるだけで自動的に綺麗にしてくれるサイトもありますが、プログラム内で自動的に整形してファイルに保存できるようにしておくのがプロへの第一歩です。今回の知識を活用して、自分自身のアプリケーションで生成するログファイルや設定ファイルを、誰が見ても美しい状態に保てるように心がけましょう。