ホームページ >ウェブフロントエンド >jsチュートリアル >Json文字列をJSオブジェクトに変換する効率的な方法の例_javascriptスキル

Json文字列をJSオブジェクトに変換する効率的な方法の例_javascriptスキル

WBOY
WBOYオリジナル
2016-05-16 17:34:54822ブラウズ

今日は JQuery ソース コードを勉強し、次のように JSON 文字列を解析する方法を確認しました。


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

// 先頭/末尾の空白が削除されていることを確認します (IE は処理できません)
data = jQuery.trim( data );

// 受信データが実際の JSON であることを確認します
// ロジックは http://json.org/json2.js
から借用 if ( /^[/],:{}/s]*$/.test(data.replace(///(? :["////bfnrt]|u[0-9a-fA-F]{4})/g, "@")
.replace(/"[^"///n/r]* "|true|false|null|-?/d (?:/./d*)?(?:[eE][ /-]?/d )?/g, "]")
.replace( /(?:^|:|,)(?:/s*/[) /g, "")) ) {

// 最初にネイティブ JSON パーサーを使用してみます
return window.JSON && window.JSON.parse ?
window.JSON.parse( data ) :
(new Function("return " data ))();

} else {
jQuery.error( "無効な JSON: " data );
}
}


このメソッドのコア コードは次のとおりです:
コードをコピーします コードは次のとおりです。

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

これは Function() コンストラクターを使用します。関数実行データとしてjson文字列が渡され、定義直後に関数が実行されます。このとき、この関数はJSONオブジェクトを返します。

テストを行ったところ、このメソッドを使用した JSON 文字列の解析は Eval を使用するよりも数百倍高速であることがわかりました

コードをコピーコードは次のとおりです:

var jsonStr ="{";
for(var i=0;i jsonStr ="a" i ": " i ","
}
jsonStr = jsonStr.substring(0,jsonStr.length-1);
jsonStr ="}";

var date = new Date();
var start = date.getTime()
//var boj = (new Function("return " jsonStr ))();
var boj = eval ("(" jsonStr ")");
var date1 = new Date();
console.info(date1.getTime()-start);


filfox を使用して、 test 結果として、eval を使用した解析には 7234 ミリ秒かかりましたが、関数メソッドの使用には 55 ミリ秒かかりました。これは驚くべきことです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。