web-dev-qa-db-ja.com

ブラウザ固有のJSONサポート(window.JSON)

私は、window.JSONオブジェクト、しかし詳細は入手困難です。誰でも正しい方向を指すことができますか?このオブジェクトが公開するメソッドは何ですか?どのブラウザでサポートされていますか?

92
levik

最新のブラウザはすべて、ネイティブJSONエンコード/デコードをサポートしています(Internet Explorer 8以降、Firefox 3.1以降、Safari 4以降、およびChrome 3+)。基本的に、JSON.parse(str)strのJSON文字列はオブジェクトを返し、JSON.stringify(obj)はオブジェクトのJSON表現objを返します。

MDN記事 の詳細。

109
Sasha Chedygov

jQuery-1.7.1.js-555行...

parseJSON: function( data ) {
    if ( typeof data !== "string" || !data ) {
        return null;
    }

    // Make sure leading/trailing whitespace is removed (IE can't handle it)
    data = jQuery.trim( data );

    // Attempt to parse using the native JSON parser first
    if ( window.JSON && window.JSON.parse ) {
        return window.JSON.parse( data );
    }

    // Make sure the incoming data is actual JSON
    // Logic borrowed from http://json.org/json2.js
    if ( rvalidchars.test( data.replace( rvalidescape, "@" )
        .replace( rvalidtokens, "]" )
        .replace( rvalidbraces, "")) ) {

        return ( new Function( "return " + data ) )();

    }
    jQuery.error( "Invalid JSON: " + data );
}





rvalidchars = /^[\],:{}\s]*$/,

rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,

rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,

rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
30
lks

Json2.jsを使用する利点は、ブラウザーにパーサーがない場合にのみパーサーをインストールすることです。古いブラウザとの互換性を維持できますが、使用可能な場合はネイティブのJSONパーサー(より安全で高速)を使用します。

ネイティブJSONを使用するブラウザー:

  • IE8 +
  • Firefox 3.1以降
  • Safari 4.0.3以降
  • Opera 10.5+

G.

12
Gak

[拡張 musicfreak コメント]

JQueryを使用している場合は、 parseJSON を使用します

var obj = jQuery.parseJSON(data)

内部的には、ブラウザが.JSON.parseをサポートしているかどうかを確認し、(可能な場合)ネイティブwindow.JSON.parseを呼び出します。

そうでない場合、それ自体を解析します。

10

このスレッドに遭遇した人の利益のために-JSONオブジェクトをサポートするブラウザの最新の決定的なリスト こちらをご覧ください 。簡潔な一般的な答え-2013+で本当に重要なほとんどすべてのブラウザー。

8
DroidOS