最近、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だけを使う)ですべてを表現する。
「値」には、「文字列」「数値」「オブジェクト」「配列」、真偽値(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スキーマの注釈でエラーが起きてしまうこともある。
この連載の記事
-
第466回
PC
PowerToysの最近の新機能には、複数アプリを指定位置に起動する「ワークスペース」や新規作成のカスタマイズがある -
第465回
PC
WindowsのPowerShellからBluetoothデバイスを調べる -
第464回
PC
Windows 10のサポート切れまで1年を切った さてWindows 10マシンをどうする? -
第463回
PC
Windows Terminal Preview版でSixelグラフィックスを実際に表示させてみる -
第462回
PC
Windows Terminal Preview版でSixelグラフィックスを扱う -
第461回
PC
Copilot+ PCを買ってみたが、「今焦って買う必要はない」のかもしれない -
第460回
PC
Windowsでsftpを使う -
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ - この連載の一覧へ