ブラウザネイティブのJSONサポート(window.JSON)


92

window.JSONオブジェクトを介してオブジェクトのJSON解析/シリアル化をネイティブでサポートする一部のブラウザーへの参照を見てきましたが、詳細を理解するのは困難です。誰かが正しい方向を指すことができますか?このオブジェクトが公開するメソッドは何ですか?どのブラウザでサポートされていますか?


8
参照してください。私は、JSONの構文解析を使用することができますか?JSONオブジェクトをネイティブでサポートしているブラウザに関する情報。
outis

回答:


108

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

MDN記事の詳細。


私はサポートが広まっているわけではないことを知っていますが、このメソッドを使用すると、文字列をeval()するよりもはるかに高速で安全になるはずです。他のブラウザからのサポートについて何か考えはありますか?
levik 2009年

17
ああ、そして余談ですが、eval()JSON文字列は絶対に使用しないでください。代わりに、利用可能な多くのJSON解析ライブラリの1つを使用してください。
サーシャチェディゴフ2009年

1
@colbeerhey:ああ、それは私がよく目にするものだ。jQueryを盗むこともできます。
サーシャチェディゴフ2010

2
参考までに、「NEVER eval()...」と言ってから、json2が広くサポートされているライブラリであることを述べた場合、evalを使用することは注目に値しますが、最初に正規表現を使用して文字列を検証しようとします。これは、同等のパフォーマンスで検証しないパーサーがありますが、文字列の検証と解析よりも高速です。json2.jsは、その普及度だけを考えても、おそらく最良の選択です。
TheXenocide

2
@TheXenocide:良い点ですが、その作成者はおそらく妥当性検査コードにかなりの時間を費やしたので、eval()JSON文字列は絶対に使用しないでください。
サーシャチェディゴフ2011年

30

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,

4
いいね。jQueryを使用するための良い議論。
OneWorld

11
jQueryの内部を調べるための引数のようなものです=)
Olga

13

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

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

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

G.


10

musicfreakコメント延長】

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

var obj = jQuery.parseJSON(data)

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

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


8

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.