次の方法で共有


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 インターネット エクスプローラーには、stringifyparse という 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 エンジンのバージョン サポートに関するページを参照してください。

互換性ビューを使用して Web アプリケーションの互換性の問題を修正する