CodeGym /コース /C# SELF /基礎 JSON フォーマットとその人気...

基礎 JSON フォーマットとその人気

C# SELF
レベル 43 , レッスン 4
使用可能

1. はじめに

もし現代のAPIに触れたことがあるなら、webサービスやモバイルアプリを扱ったことがあるなら、あるいは「汎用フォーマット」で何か保存しようとしたことがあるなら — あなたは既に、あるいはこれからJSONに出会うでしょう。これは異なるプログラミング言語やプラットフォームを繋ぐフォーマットです:C#JavaScriptPython — みんなJSONでやり取りします。

なぜJSONがシリアライズのスターになったか?理由は簡単:コンパクトで、人が読めて、軽量なテキストフォーマットだからです。人気の裏にはシンプルさ、汎用性、各言語の優れたサポートがあります。

JSONとは?

JSONJavaScript Object Notationの略です。フォーマットはJavaScriptの世界から生まれましたが、すぐにブラウザの外へ広がりました。重要なのは、名前にJavaScriptが入っていても、JSONはJavaScriptに縛られず、どの言語でも便利に使える点です。

このフォーマットは2000年代初頭にダグラス・クロックフォードによって、冗長なXMLの代替として考案されました。アイデアは単純:「JSONは短い、シンプル、目で見て分かりやすい」。

2. JSONフォーマットの基本ルール

大事なこと:JSONは厳密に定義されたテキストフォーマットです。魔法はなく、ただのテキストなのでどんなエディタでも開けます。

基本的な構成要素:

  • 配列 (arrays): 順序付きの値のリスト。
  • オブジェクト (objects): キーと値のペアの集合。
  • プリミティブ型: 文字列、数値、ブール値(true, false)と特別な値のnull

最小限のJSONドキュメントの例:

{
    "name": "イワン",
    "age": 25,
    "isStudent": true,
    "scores": [5, 4, 5, 3],
    "contacts": {
        "email": "ivan@example.com",
        "phone": null
    }
}

概略の構造

C# の型と JSON 表現の対応表の簡単な例:

C# 型 JSON の例
string
"name": "イワン"
int, double
"score": 5
bool
"isStudent": true
配列 (int[], ...)
"scores": [5,4,5,3]
オブジェクト (class, ...)
"contacts": { ... }
null
"phone": null

JSON記述のルール

  1. 文字列は常にダブルクォート: 'text' — エラー、正しくは "text"
  2. オブジェクトのキーはダブルクォートの文字列であること:例えば "name": ...
  3. 要素間のみでカンマを使う。最後の要素の後のカンマは使わない。
  4. インデントは必須ではないが、可読性が上がる。
  5. 数値はクォートで囲まない:"age": 25"age": "25" は誤り。
  6. ブールは true/false(クォート無し)、TrueFALSE、あるいは "true" はダメ。
  7. nullnull と書く(クォート無し)。

3. プログラマ目線のJSON

C# の型との類似点:

  • JSONオブジェクトDictionary<string, object>
  • JSON配列T[] または List<T>
  • JSON文字列 ≈ 普通のstring
  • JSON数値int または double(値による)

オブジェクトをJSONにシリアライズする例

クラス:

public class Student
{
    public string Name { get; set; } = "";
    public int Age { get; set; }
    public bool IsStudent { get; set; }
    public int[] Scores { get; set; } = Array.Empty<int>();
}

生成されるJSON(簡略化、シリアライズの詳細は後述):

{
    "Name": "イワン",
    "Age": 25,
    "IsStudent": true,
    "Scores": [5, 4, 5, 3]
}

4. 有効なJSON構造の例

配列とネストしたオブジェクトを含むオブジェクト

{
  "product": "コーヒー",
  "price": 125.50,
  "inStock": true,
  "attributes": {
    "weight": 500,
    "unit": "g"
  },
  "tags": ["飲み物", "エネルギー", "アラビカ"],
  "promotions": null
}

オブジェクトの配列

[
  {"id": 1, "name": "ペーチャ"},
  {"id": 2, "name": "マーシャ"},
  {"id": 3, "name": "ヴァーシャ"}
]

5. 無効なJSONの例(とその理由)

シングルクォート:

{ 'name': 'イワン' } // エラー!

JSONはダブルクォートを要求します。

最後の要素の後のカンマ:

{ "x": 1, "y": 2, } // エラー!

末尾の余分なカンマは許されません。

コメント:

{
  // 残念ながらJSONではこれは動きません
  "name": "イワン"
}

JSONにはコメントがありません。

6. 実プロジェクトでJSONが必要な理由

システム間のデータ伝達

JSONは異なるアプリケーション間の共通言語で、たいていはHTTPの上で使われます。例えばサーバーがC#でフロントエンドがJavaScriptの場合、共通のフォーマットはJSONです。

設定やデータの保存

多くのアプリは設定を.jsonファイルに保存します。例えば appsettings.json は .NET アプリの標準です。利点:読みやすく、編集しやすく、バージョン管理しやすい。

サーバーとモバイルのAPI

大多数のREST APIはリクエスト/レスポンスのフォーマットとしてJSONを使います:例えばユーザー一覧はオブジェクトの配列として返ってきます。

ツールやライブラリの設定

多くの.NETツール(Serilog、Swaggerなど)は設定にJSONを使います。XMLはだんだん減り、JSONの方がコンパクトで分かりやすいです。

7. JSONの人気:なぜみんな好きなのか?

  • 可読性。 プログラマでない人でも何が何だか分かる。
  • ネットワーク転送に便利。 ただのテキストで、サイズも小さい。
  • 全言語でのサポート。 シリアライズ/デシリアライズが簡単にできる。
  • 設定ファイルに向いている。 どんなエディタでも扱いやすい。
  • 生成が簡単。 JSONを作るのはとても簡単。
  • 配列、ネスト、null 直感的で、XMLのような余計な複雑さがない。

いつJSONを選ぶべきか?

  • モバイルやウェブアプリを作っているとき;
  • 外部サービスのAPIとやり取りするとき;
  • 将来の統合を見据えて柔軟なアプリにしたいとき。

8. C#でのJSON操作

代表的な.NETライブラリを簡単に:

最小限のシリアライズ/デシリアライズの例:

using System.Text.Json;

// オブジェクトをJSON文字列に変換
var student = new Student { Name = "イワン", Age = 25, IsStudent = true, Scores = new[] {5, 4, 5, 3} };
string json = JsonSerializer.Serialize(student);

// 逆にJSON文字列からオブジェクトを読み取る
Student? parsed = JsonSerializer.Deserialize<Student>(json);

Console.WriteLine(json);

9. JSONで初心者がやりがちなミス

よくあるミスはクォートの混同やカンマの書き忘れです。コメントを追加しようとする人もいます(C#みたいで便利ですからね!)が、JSONは許しません。

もう一つよくあるのは、コレクションを初期化せずにシリアライズしてしまうこと:結果として期待した配列の代わりに "scores": null が出ることがあります。コレクションはあらかじめ初期化しておきましょう。

JSONはテキストだと覚えておいてください:大量データはメモリを大量に消費します。仮に500MBのデータをJSONでシリアライズすると、アプリのパフォーマンスに大きく影響します。

1
アンケート/クイズ
シリアライズ入門、レベル 43、レッスン 4
使用不可
シリアライズ入門
データのシリアライズの概念
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION