JSON (JavaScript Object Notation)は、データ交換フォーマットの一種で、名前にはJavaScriptと入っていますが、 現在ではJavaScriptに限らず、各種プログラム言語で利用できます。 その特徴としては、テキスト形式で可読性が高いこと、単純で軽量なことなどが挙げられます。 JSONは、同様にテキストベースであるXML (Extensible Markup Language)と比べてもよりシンプルであり、 各種言語との親和性も高く使い勝手も良いことから、 最近はWebアプリケーションなどで利用されています。
JSONのフォーマットでは、四つの基本的な型(文字列、数値、ブール値、null値)と、 二つの構造型(オブジェクト、配列)を表現できます。 当初JSONは、JavaScriptプログラムでのデータ交換を目的として、 JavaScriptの言語仕様であるECMA-262第3版のサブセットとして設計されましたが、 JSONのフォーマットそのものは特定の言語に依存しない形式になっています。 それに加えて、前述のように単純なため、JSONはJavaScriptだけではなく、C、C++、Objective-C、Java、Perl、Ruby、Pythonなど、 現在は多数の言語で利用可能になっています。 そのため、これらの言語をまたいで、あるいはネットワークを通して、データを交換できます。 JSONの他にも、アプリケーション間のデータ交換に使用されるXMLがあります。
JSON はキーと値のペアを使用してマップのような構造を作成します。 キーはペアを識別する文字列です。値は、そのキーに入力した情報です。 たとえば、「番号プロパティ」: 10 とすることができます。この場合、「番号プロパティ」 がキー、10 が値です。
対照的に、XML はマークアップ言語であり、HTML に似た構造を持つ SGML のサブセットです。 データをツリー構造で保存し、情報を何層にも重ねて表示するので、後でたどって読むことができます。 ツリーはルート (親) 要素から始まり、その後に子要素に関する情報が表示されます。 この幅広い構造は、多くの変数や動的構成を読み込むのに役立ちます。
JSON で使用される構文はよりコンパクトで、書きやすく読みやすいです。オブジェクトを簡単に定義できます。 XML はより冗長で、エンティティリファレンスを特定の文字に置き換えます。 たとえば、XML) は < 文字の代わりに、エンティティリファレンス⁢を使用します。 XML はエンドタグも使用するため、JSON よりも長くなります。
XMLは、XMLパーサーを使用して XML を解析する必要があるため、処理が遅くなり、複雑になることがよくあります。 一方、JSONは、よりアクセスしやすい標準の JavaScript 関数を使用して、JSON を解析できます。 構文やファイルサイズが異なるため、JSON は XML よりも速く解析できます。
XML はマークアップ言語としてはより複雑で、タグ構造が必要です。 対照的に、JSON は JavaScript から拡張されたデータフォーマットです。 タグを使用しないため、よりコンパクトで人間の目で見ても読みやすくなっています。 JSON は同じデータを小さいファイルサイズで表せるため、データ転送を高速化できます。
JSON 構文解析は XML よりも安全です。 XML の構造は不正な変更を受けやすいため、XML 外部エンティティインジェクション (XXE) と呼ばれるセキュリティ上のリスクが生じます。 また、構造化されていない外部ドキュメントタイプ宣言 (DTD) に対しても脆弱です。 送信時に DTD 機能をオフにすることで、これらの問題の両方を防ぐことができます。