JavaScript Object Notation (JSON) は、JavaScript 言語のオブジェクト リテラル表記のサブセットに基づく単純で軽量のデータ交換形式です。 Windows Internet Explorer 8 の JavaScript エンジンは、ネイティブ JSON 処理関数 (ダグラス・クロックフォードの json2.js APIを使用) 用の ECMAScript 3.1 JSON 提案 を実装しています。
Internet Explorer 8 には、ES3.1 Proposal Working Draftで説明されている 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 Internet Explorer には、2 つの組み込みメソッド (stringify と 解析) を含むグローバル JSON オブジェクトを導入することで、JSON のネイティブ サポートが含まれています。 グローバル JSON オブジェクトは JavaScript エンジンで定義され、エンジンの初期化フェーズ中に作成されます。 下位互換性を維持するために、この機能は、Web サイトで "Internet Explorer 8 Standards" レイアウト (ドキュメント) モードを使用して最新バージョンの JavaScript 機能を使用している場合にのみ使用できます。 この機能は、グローバル変数 JSON に依存する Web ページの動作や、json2.jsを使用する Web ページの動作にも影響する可能性があります。
グローバル JSON オブジェクトはオーバーライドできます。 ただし、Web ページで "Internet Explorer 8 Standards" レイアウト (ドキュメント) モードを使用する場合、未定義のオブジェクトではなくなりました。 JSON は JavaScript エンジンによってグローバル名としてインスタンス化されるため、"if(!this.JSON)" は False に評価され、ユーザー コードで変更する必要があります。
json2.js を使用する Web ページは影響を受けにくい可能性があります。 いくつかの例外を除き、これらのページは高速に動作するはずです。 例外は、Internet Explorer のネイティブ JSON 実装と json2.jsの違いが原因です。 たとえば、シリアル化中に、ネイティブ JSON 実装はサイクルを検出し、json.jsのように無限再帰に入りません。 これらの例外の詳細については、JavaScript ブログを参照してください。
詳細については、JSON ドキュメントの と バージョン管理と JavaScript エンジンのバージョン サポートを参照してください。
関連トピック