最近、JSON(ジェーソン)を用いたデータ交換が増えてきた。JSONとは13日の金曜日に来るヤツでもなければ、スーパーマーケットの名前でもない。「JavaScript Object Notation」の略で、当初はJavaScriptでオブジェクトデータをファイルに保存したり、通信で送信するなどの前に「シリアライズ」するための仕様だったが、現在ではECMAやIETFで標準化されており、さまざまな言語から利用が可能だ。
Windowsで作業する際にもこのJSONデータを扱うことがあり、今後もさらに増えていくことが考えられる。今回は、JSONをちゃんと解説して、Windowsでの簡単な使い方を見ていく。なお、JSONの仕様書はECMA-404であり、以下のサイトから入手が可能だ(https://www.json.org/json-ja.html)
そもそもJSONとはなんぞや?
JSONは、「名前」と「値」のペアの集まりで順番を持たない「オブジェクト」と「値」順番に並べた「配列」という2つの構造を持つ。これらは、互いに他方を含むことができる。基本的にUnicode文字(JSONではUTF-8だけを使う)ですべてを表現する。
JSONのオブジェクトは、全体を波括弧({})で囲み、名前(文字列。ダブルクオートで括る)と値の組をカンマで区切って並べる。名前と値の間には、コロン(:)を置き、最後の組の後ろ(閉じ波括弧の前)には、カンマを置かない
「値」には、「文字列」「数値」「オブジェクト」「配列」、真偽値(trueとfalse)、ヌル値(null)がある。このうち「文字列」は、ダブルクオートで囲まれたゼロ文字以上のユニコード文字の連なりである。ただし逆スラッシュを使う「エスケープ文字」がいくつか定義されている。
| エスケープ文字 | 意味 |
|---|---|
| ¥" | タブルクオート |
| ¥¥ | 逆スラッシュ |
| ¥/ | スラッシュ |
| ¥b | バックスペース |
| ¥f | フォームフィード(改ページ) |
| ¥n | LF |
| ¥r | CR |
| ¥t | TAB |
| ¥uNNNN | NNNNで表されるユニコード文字 |
数値は、負号、数字、小数点(ピリオド)、指数記号(Eまたはe)からなる数値の文字表現を使う。文字列と違うのは、数値はダブルクオートで囲まないことだ。特に数値の仕様は定められておらず、受け取った側が解釈することになる。
仕様としてはかなり単純で、大きな処理性能は不要ではあるが、最後まで読まないと終わりがわからないので、IoT機器のようにメモリが限定されたハードウェアでは、送信することには問題はないものの、受信はかなり制限がつく。とはいえ、PCやスマートフォンクラスのハードウェアであれば、これを処理するのにはほとんど問題はない。
JSONスキーマで拡張できる
JSONは、単純な構造であるがために扱いやすいが、逆に高度な利用では、その単純さがあだになることもある。たとえば、JSONには注釈を一切含むことができないため、JSON自体とは別に記録しておかねばならない。データファイルとして使うときには、ちょっと致命的ともいえる欠点ではある。
これをカバーしようとして作られたのが「JSONスキーマ」という仕様だ。これは、JSONの拡張として定義されている。JSONスキーマでは$commentで注釈を表す。また、$schemaというオブジェクトでスキーマ定義が保存されているURLを示す。
JSONスキーマに対応している場合、$schemaを使ってスキーマ定義を読み込む。スキーマには、オブジェクトに含めることができるメンバー名やその説明、値の取り得る範囲などが定義されている。これを使えば、名前を補完したり、適切な名前や値を設定するようにユーザーに促すことなどができる。
さらにVS CodeやVisual Studioでは、JSON with JavaScript style Comment(以下、JSONCとする)というMicrosoftが提案した方式で「//」で始まる行などを注釈行として無視するようになっている。
Windows Terminalは、設定をJSONで行ない、JSONスキーマに対応している。そのスキーマは、以下の画面のようなものになっている。Visual Studio CodeやVisual Studioのエディターなどは、JSONスキーマに対応しており、JSONファイルを読み込んだとき、スキーマがあれば、これを自動で読み取り、補完機能などが動作するようになっている。
ただし、JSONスキーマはあくまでもJSONの拡張であり、JSONの範囲を逸脱している。JSONを扱えるプログラムのすべてがJSONスキーマに対応しているわけではない。このため、JSONスキーマの注釈でエラーが起きてしまうこともある。

この連載の記事
-
第508回
PC
Scalable Vector Graphics(SVG)そもそも何なのか? -
第507回
PC
Windows 11の「開発者モード」とは何か? -
第506回
PC
Windows 11は早くも来秋登場の26H2プレビューの準備が始まる -
第505回
PC
結構変化しているWindows 11のエクスプローラーの基本設定を見直す -
第504回
PC
新しいOutlookとOutlook Classic、そろそろ古いOutlookとExchangeの組み合わせは引退の頃合いか -
第503回
PC
機能が増えたこともあり、寄せ集めから統合化に進むWindowsの便利ツール「PowerToys」 -
第502回
PC
Windows 11でBluetoothのオーディオ新規格「Bluetooth LE Audio」を試す -
第501回
PC
Windows 11 Ver.25H2での変更点、新機能を整理する -
第500回
PC
Windows 11 Ver.25H2が完成した -
第499回
PC
Windowsでの致命的だが回復可能なエラーに備える手段を2つ紹介 -
第498回
PC
Windows Terminalの安定版V1.23が公開 設定UIが改良される - この連載の一覧へ











