JSONの記法と取り扱い
そもそもJSONとはどういった記法でしょうか。
例として昔ながらの中華料理屋さんでの注文場面をイメージしてみます。ウェイターさんが注文を受け伝票に記載、記載した注文伝票を厨房に渡します。注文伝票の先頭には伝票番号と日付、テーブル番号、お客さまの人数、その下にオーダーされた品目を書いてあるイメージですね。このときの「注文伝票」がJSONドキュメントに相当します。
この「注文伝票」をJSONで表現してみましょう。まず括弧{}の中に対象の注文を記載していきます。この外側の括弧{}が一つのトランザクションに相当し、それぞれキーと値がペアになる形で伝票番号・日付・客席情報・明細を記載していきます。
値は括弧{}でネストしたり、[]を利用し配列にすることもできます。ここでは、客席の値は{}でネストし、テーブル、人数と客席情報を記載し、明細の値は[]でメニューと数量を配列で記載しています。ネストや配列を用いることで複雑なデータ構造も柔軟に表現することができます。
データベースとして多く活用されているリレーショナルでは、通常明細データとマスター・データは分離(=正規化)しますが、JSONの世界ではこれらを同一のドキュメント内に一括りに記載します。1つのドキュメントとして表現される結果、いつ誰が何をどうした、といった情報をすぐに認識できます。あるテーブルで何人の方が何を注文されたのか、その合計金額はいくらなのか等を伝票1枚で確認できることと同じですね。
このことは実体を模写するアプリケーション開発、特にウェブ画面の実装しやすさにも直結しています。以下はJavaScriptの例ですが、JSONドキュメントから特定のデータを参照するには、ドキュメントをJSON.parse()で解析、変数化した後に、その特定のデータのキーをドットでつないで指定します(ドット記法)。シンプルでコードも読みやすいですね。
もちろんJSONを扱うデータベースも存在します。スキーマ設計と正規化が基本である従来のリレーショナル・データベースは、JSONの柔軟性に適しているとはいえませんでした。そこで登場したのが、JSONを専門に扱うNoSQLのドキュメント指向データベースです。スキーマ設計が不要で高速なドキュメント指向データベースはデータベースにシンプルなJSONの処理を求めるアプリケーションでよく利用されています。よく知られているドキュメント指向データベースにMongoDBがあります。MongoDBはMongo Shellというシェルを提供しています。以下はMongo ShellでのJSON操作の例です。
ドキュメント指向データベースでは、JSONドキュメントをコレクションに格納して操作します。リレーショナルで言うところの表と行がJSONにおけるコレクションとドキュメントに対応します。コレクションを作成し、その中に複数のドキュメントを格納していくイメージです。