0

JSON.parse() をサポートしていないブラウザーで JSON を解析する必要があるスクリプトを作成しています。厳密なサイズ目標 (合計サイズ < 20 kb) があるため、jQuery などの外部ライブラリに頼ることはできません。

通常のアプローチは eval() を使用することですが、(外部ソースから提供された) JSON 文字列を制御できないため、安全ではないことが懸念されます。

スクリプト タグを使用してオブジェクトを作成するというアイデアを思いつきました。

var json='{"name":"Me","age":"30"}';
var scr=document.createElement("script");
scr.innerHTML="var obj="+json;
document.body.appendChild(scr);

ここに示されているように、これはうまくいくようです: http://jsfiddle.net/bz8f7/

ここで何か不足していますか?私の方法がうまくいかない、または安全ではない場合はありますか?

注:このメソッドがグローバル変数を作成することは承知しており、私のユースケースでは問題ありません。

4

4 に答える 4

1

JSON 3のような JSON ポリフィルを使用します。これは適切なパーサーです。つまり、evalネイティブの JSON サポートがなくても を使用しません。

于 2012-09-30T19:56:43.617 に答える
1

はい、うまくいきます。いいえ、まったく同じ欠点がevalあります (DOM のためにさらに遅くなる可能性があり、JSONP のようなグローバル関数を使用したくない場合はグローバル変数を作成します)。

を使用JSON.parseし、レガシー ブラウザを使用する場合は shim してください。それを行うことができる軽量ライブラリがあります。

于 2012-09-30T19:57:23.197 に答える
0

より複雑で非効率的なメソッドを使用するだけで、まだ JavaScript を評価していますeval。eval のすべての安全性の問題があります。

于 2012-09-30T19:56:32.150 に答える
0

縮小前に 20K 未満になるDouglas Crockford のjson2.jsを使用します。ほとんどすべてのブラウザ実装はJSON.parse()それから始まったので、互換性の問題はないはずです。

于 2012-10-01T09:15:11.840 に答える