JavaScript Object Notation (JSON)
JavaScript Object Notation (JSON) は、JavaScript 言語のオブジェクト リテラル表記のサブセットに基づく、シンプルで軽量のデータ交換形式です。 Windows Internet エクスプローラー 8 の JavaScript エンジンでは、ネイティブ JSON 処理関数 (ダグラス クロックフォードの json2.js API を使用) 用の ECMAScript 3.1 JSON 提案が実装されています。
インターネット エクスプローラー 8 には、ES3.1 提案作業ドラフトに記載されている JSON サポートに準拠するネイティブ JSON オブジェクトが含まれています。 一部の Web ページでは、ネイティブ JSON オブジェクトが検出され、標準以外の方法で使用されます。 通常、この使用によりスクリプト エラーが発生し、AJAX 要求の処理が中断されます。 次のコード例は、JSON オブジェクトを使用する間違った方法を示しています。
if(!window.JSON) JSON = myJSON;
JSON.encode(obj); // Not part of the standard
代わりに、次のコード例は JSON オブジェクトを使用する良い方法を示しています。
JSON = myJSON;
JSON.encode(obj);
Windows インターネット エクスプローラーには、stringify と parse という 2 つの組み込みメソッドを持つグローバル JSON オブジェクトを導入することで、JSON のネイティブ サポートが含まれています。 グローバル JSON オブジェクトは JavaScript エンジンで定義され、エンジン初期化フェーズ中に作成されます。 下位互換性を維持するために、この機能は、Web サイトで "インターネット エクスプローラー 8 標準" レイアウト (ドキュメント) モードを使用して、最新バージョンの JavaScript 機能を使用している場合にのみ使用できます。 また、この機能は、グローバル変数 JSON に依存する Web ページの動作や 、json2.jsを使用する Web ページの動作にも影響を与える可能性があります。
グローバル JSON オブジェクトをオーバーライドできます。 ただし、Web ページで "Internet エクスプローラー 8 Standards" レイアウト (ドキュメント) モードを使用する場合、未定義のオブジェクトではなくなります。 JSON は JavaScript エンジンによってグローバル名としてインスタンス化されるため、"if(!this" のようにチェックされます。JSON)" は False と評価され、ユーザー コードで変更する必要があります。
json2.jsを使用する Web ページは影響を受けにくい可能性があります。 いくつかの例外を除いて、これらのページはより高速に動作するはずです。 例外は、インターネットエクスプローラーネイティブ JSON 実装とjson2.jsの違いが原因です。 たとえば、シリアル化中、ネイティブ JSON 実装はサイクルを検出し、json.jsのように無限再帰を行いません。 これらの例外の詳細については、 JavaScript ブログを参照してください。
詳細については、 JSON ドキュメント と バージョン管理と JavaScript エンジンのバージョン サポートに関するページを参照してください。
関連トピック