JSONとは?WEB開発で多用されるJSONのフォーマット詳細から使い道まで解説
Web開発などをしていると、JSONという言葉を耳にする機会があると思います。
データフォーマットの一つであるJSONは様々な分野で使われており、またプログラミング言語でのサポートも充実しているため、開発において関わることが多いでしょう。
Web開発ではもちろん、それ以外の領域でも、JSONの扱い方は必要な知識として知っておかなければなりません。
そんなJSONについて、どんなフォーマットで何に使われているのかについて、詳しく解説していきます。
JSONとは
JSONとはJavaScript Object Notationの略で、文字通りJavaScriptのオブジェクト型にそっくりのデータ形式です。
JavaScriptのオブジェクト型は非常に汎用性の高い型であり、何でもかんでもオブジェクト型で済ませてしまえるほどです。
この汎用性が高すぎる点はプログラミング言語において必ずしも良いことではありません。
しかし、この仕様をデータ形式として切り出して作られたJSONは非常に扱いやすいフォーマットとして、JavaScript周り以外でも広く使われるようになり、汎用フォーマットとして不動の地位を築きました。
JSONはどんなデータ形式?
JSONはJavaScriptのオブジェクト型に制約を課したフォーマットとなっています。
ですので、JSONとして正しいデータは、そのままJavaScriptのオブジェクトとしても正しいデータとして扱え、このことからもわかるとおり見た目はほぼJavaScriptのオブジェクト型そのままです。
{
“key1”: “value1”,
“key2”: 12345,
"key3”: [6, 7, 8, 9, 10],
“key4”: true,
“key5”: {
“key5-1”: null
}
}
このように全体を中括弧でくくり、キーは文字列に限り、値として文字列・数値・配列・真偽値・null・オブジェクトをとれるkey-value型のオブジェクトになっています。
なお、末尾のセミコロンは不要です。
一方でJavaScriptの文法としては許されるが、JSONでは許されない制約があります。
まず、JavaScriptにおけるコメントの挿入が許されません。
{
“key1”: “value1” // this comment is invalid
}
以上のような表記は、JavaScriptのオブジェクトとしては有効ですが、JSONとしては無効です。
JSON内にコメントを書く手段はありません。
JSONデータをプログラムなどから書き出すのではなく、人間が手作業で管理するときに、コメントを書く手段がない点は問題になるかもしれません。
もう一つ、JavaScriptのオブジェクトではキーや値の文字列はシングルクォーテーション(”)でもダブルクォーテーション(””)でも問題ないのですが、JSONではダブルクォーテーションしか許されません。
{
'invalid key': 'invalid value'
}
以上の例はキー・値ともに無効です。
これらの無効なJSONをどう扱うかはJSONパーサー次第であり、無効なJSONもJavaScriptオブジェクト同様に解釈してくれることもありますが、それに期待すべきではありません。
JSONは何に使う?
さて、このような仕様のJSONですが、実際に何に使われているのでしょうか?
JSONはJavaScriptから生まれたために、特にWeb周りで広く使われていますが、それだけに留まりません。
APIサーバーからの応答形式として
APIサーバーにアクセスし何かしらの情報が返ってくるとき、JSON形式で返されるのが一般的です。
JavaScriptでAjax通信でサーバーへGET/POSTするときにJSON形式を使うと思いますが、他のプログラミング言語でアクセスする際にも基本的にはJSONを使います。
GETで得たJSONデータは各言語に用意されたJSONライブラリ・モジュール等でパースし、各言語標準のデータ型に直した上で内容を読むことになります。
POSTに関しても同様です。
ですので、ただAPIサーバーへ空のアクセスをするだけならともかく、データをやりとりするならばJSONを扱えなければなりません。
自分でAPIサーバーを立てる場合も、よほど特別な事情がなければデファクトスタンダードであるJSON形式でデータを返すのが無難です。
汎用的なデータの保存フォーマットとして
JSONは、プログラミングにおける外部保存フォーマットとしても非常に便利な形式です。
JSON自体がJavaScriptのオブジェクト型をベースにしていることもあり、言語によってオブジェクト型・辞書型・連想配列などと呼び方が違いますが、そのようなタイプのデータをほぼそのまま保存することができます。
因みに、WEB開発で非常にスタンダードな言語であるPHPにも、配列をJSON形式に変換するメソッド(反対にJSONを配列にするメソッド)が存在します。
これらを
JSONエンコード(配列からJSONに変える)
JSONデコード(JSONから配列に変える)
と呼びます。
非テキスト型のデータなどは、いわゆるシリアライズを行う必要はありますが、保存・読み込みはかなり直感的に行えるでしょう。
また上でも述べましたが、多くのプログラミング言語ではJSONの読み書きのためのライブラリなどが標準で用意されており、外部モジュールなどに頼らずとも読み書きできることも嬉しい点です。
JSONを使う必要性
以上のように、すでにJSONが広く使われているがために、好むと好まざるに関わらずJSONを扱う必要性が出てきます。
では、あなたが何かサービスやソフトウェアを作成するとして、その応答やデータ保存形式に積極的にJSON形式を選ぶ必要性は何でしょうか?
プログラミング言語のサポートが手厚い
繰り返しますが、今使われているモダン言語のほぼ全てで、JSON読み書き用のライブラリ等が用意されています。
これは非常に大きなアドバンテージです。
あるデータフォーマットの仕様がいかに優れていたとしても、読み書きにサードパーティのライブラリなどを導入しなければならないとすると、趣味での開発ならともかく仕事では採用のハードルが上がってしまいます。
しかしJSONなら、ほとんどの言語で何もインストールなどせずにJSON関係の標準ライブラリを読み込むだけで読み書きが行えます。
これだけで、自作のソフトウェアにJSONを採用する大きな動機になるでしょう。
JSON関係のツール類が豊富
JSONはすでに非常に幅広く使われている汎用フォーマットなので、サードパーティーのライブラリやツール類も非常に多く存在します。
CSVやエクセルファイルなど他フォーマットからJSONへ変換するツールや、定型的な一括変換を行うツール類は多くの人がGithub等で公開しており、自分でプログラムを書いて処理を行う必要がありません。
もともと扱いやすいJSON形式ですが、豊富なサードパーティーツールのおかげでさらに楽にデータを扱うことができます。
環境依存・バージョン依存の問題が少ない
JSONはモダンですが素朴なフォーマットです。
単純な改行区切りやタブ区切りなどの古いフォーマットだと、時に文字コードの違いによる環境依存のデータ互換問題が発生することがあります。
一方でエクセルなどのバイナリーファイル形式は、ソフトウェアのバージョン違いによる非互換問題が発生し、実務でもたびたび問題となります。
その点、JSONはどちらの問題も発生しにくい素朴なフォーマットとなっており、また十分に成熟したJavaScriptの文法をベースとしたデータ形式であり、これまでフォーマットが変更されたことはありません。
JSONは非常に安定した、堅牢なフォーマットということができるでしょう。
構造化したままデータベースに格納する事も可能
WEB開発を行う際に、データの個数が可変になる場合があります。
例えば、ネットショップで商品を購入する際のオプション。
商品によってオプションが変わったり、他のオプションとの兼ね合いで選べる・選べないが変わるケースもあるでしょう。
こういった時に、データベースに格納する際、全てのオプション用のカラムを用意する事は現実的ではありません。
また、専用のテーブルを用意する事も、好ましくないケースがあります。
こういった時に、1つのカラムに全てのオプション情報を入れる場合、JSON形式は非常に便利です。
JSON形式を文字列として扱い、データベースに保管します。
その後、データベースからデータを取得し、JSONデコードを行う・・・という流れです。
こうすることで、データベースの1カラムに、構造化されたデータをそのまま入れることが出来ます。
作り方によっては、カンマ区切りで1つのカラムに入れる場合もありますが、JSONを使うことで、二次元配列にも対応でき、よりスマートな開発が出来ます。
JSONの注意点
そんな優れた性質を持つJSONですが、取り扱いに注意が必要な点もあります。
まず、JavaScriptのオブジェクト型との非互換性です。
何度も紹介したとおり、JSONはJavaScriptのオブジェクト型をベースにはしていますが、JSONにのみ制約が課されています。
そのため、JavaScriptエンジニアがJSONを直接記述する際、JSONの文法では許されない表記をしてしまうことがあります。
特に、最近採用率が高いJavaScriptのコーディングルールでは、文字列リテラルの区切り子をシングルクォーテーションに指定していることが多いです。
これに慣れているエンジニアが、JSONのキーや文字列をシングルクォーテーションで括って記述してしまうと、そのJSONは不正なJSONになってしまいます。
不正なJSONに対するパーサーの挙動が決められていないのも問題で、あるパーサーではうまく解釈してくれるかもしれませんし、またあるパーサーではエラーを吐くかもしれませんし、変なデーターを読んでしまうパーサーもあるかもしれません。
JSONを手動で記述するときは、単にプログラムで読ませてテストをパスするのを確認するだけでなく、JSON自体のバリデーションを行うことを忘れないでください。
また、巨大なJSONファイルは人間にとって非常に見づらいもので、ネストが深くなると部分的に目を通すだけでもかなり難しくなってしまいます。
JSONは汎用性が高いだけに、分析用の生データをJSONで保存するような使い方をしたいこともあるかもしれませんが、そんなJSONファイルはざっと一読するだけでもかなり大変です。
データエンジニアがJSONファイルから何か情報を抜き出すには、ビジュアライザーやその他何かしらのツールを噛ませる必要がありますので、事前に考えておきましょう。
システム開発ならAMELAに相談を
今回は、現在WEB開発の様々な部分で利用されているJSON形式について見てきました。
特に最近は多くのクラウドサービスがAPIを提供しており、これらを利用することで、短い納期で高機能なシステム開発が可能になります。
そのスタンダードなデータ形式ですので、覚えておいて損はないでしょう。
AMELAでは、日々様々な開発を行っています。
技術の進歩は目まぐるしいですが、最新の技術への学習もしっかりと行い、お客様からは高い評価を頂いております。
「こんなシステムが欲しい」
「こんなところで困っている」
是非、そういったお話をお聞かせいただければと思っています。