ホームページ  >  記事  >  ウェブフロントエンド  >  JS_javascript スキルで eval を使用して JSON を解析する場合の注意事項の分析

JS_javascript スキルで eval を使用して JSON を解析する場合の注意事項の分析

WBOY
WBOYオリジナル
2016-05-16 15:32:251243ブラウズ

この記事では、JS で JSON を解析するために eval を使用する場合の注意事項を詳しく分析します。参考のために皆さんと共有してください。詳細は次のとおりです:

JSON 文字列を JS の JSON データ形式に解析するには、通常 2 つの方法があります。

1. 1 つは eval() 関数を使用することです。

2. Function オブジェクトを使用してリターン分析を実行します。

eval 関数を使用して解析し、jquery の各メソッドを使用して走査します

jquery を使用して JSON データを解析します。jquery 非同期リクエストの送信オブジェクトとして、ここで考慮されるのは、プラグを使用したカプセル化の場合、サーバーによって返される文字列の形式です。 -in JSONObject など JSON オブジェクトもこれに似ているため、ここでは説明しません。

ここではまず JSON 文字列セットを示します。文字列セットは次のとおりです。

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

var data="
{
root:
[
{name:'1',value:'0'},
{name:'6101',value:'北京市'},
{name:'6102',value:'天津市'},
{name:'6103',value:'上海市'},
{name:'6104',value:'重庆市'},
{name:'6105',value:'渭南市'},
{name:'6106',value:'延安市'},
{name:'6107',value:'汉中市'},
{name:'6108',value:'榆林市'},
{name:'6109',value:'安康市'},
{name:'6110',value:'商洛市'}
]
}";

jqueryで非同期に取得するデータ型、jsonオブジェクトと文字列をベースに、2通りの方法で得られた結果の処理方法を紹介します。

1. サーバーから返される JSON 文字列について、jquery 非同期リクエストに型の説明がない場合、または文字列として受け入れられる場合、メソッドはそれほど面倒ではありません。 eval()に文字列を入れると1回実行されます。このメソッドは、通常の javascipt を使用して json オブジェクトを取得する場合にも適しています。次に例を示します。

var dataObj=eval("("+data+")");//转换为json对象
Red rose为什么要 eval这里要添加 “("("+data+")");//”呢?

理由は、eval 自体の問題です。 jsonは「{}」で始まり最後が「{}」で終わるため、JSではステートメントブロックとして処理されるため、強制的に式に変換する必要があります。

かっこを追加する目的は、JavaScript コードの処理時に、かっこ内の式をステートメントとして実行するのではなく、eval 関数で強制的にオブジェクトに変換することです。たとえば、オブジェクト リテラル {} が外側の大かっこで追加されていない場合、eval は中かっこを JavaScript コード ブロックの開始マークと終了マークとして認識し、{} は空のステートメントを実行するとみなされます。したがって、次の 2 つの実行結果は異なります:

alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]

この種の記述は JS のいたるところで見られます。

例: (function()) {}(); クロージャー操作などを行う場合。

alert(dataObj.root.length);//输出root的子对象数量 
$.each(dataObj.root,fucntion(idx,item){ 
if(idx==0){ 
return true; 
} 
//输出每个root子对象的名称和值 
alert("name:"+item.name+",value:"+item.value); 
})

注: 一般的な js で json オブジェクトを生成するには、$.each() メソッドを for ステートメントに置き換えるだけで済み、その他は変更されません。

2. サーバーから返される JSON 文字列の場合、jquery 非同期リクエストがタイプ (通常はこの構成属性) を「json」に設定するか、$.getJSON() メソッドを使用してサーバーからの戻り値を取得する場合、 eval() メソッドを使用する必要はありません。この時点で取得される結果はすでに json オブジェクトであるため、オブジェクトを直接呼び出すだけで済みます。ここでは、データ処理メソッドを説明するための例として $.getJSON メソッドが使用されています。

$.getJSON("http://www.phpzixue.cn/",{param:"gaoyusi"},function(data){ 
//此处返回的data已经是json对象 
//以下其他操作同第一种情况 
$.each(data.root,function(idx,item){ 
if(idx==0){ 
return true;//同countinue,返回false同break 
} 
alert("name:"+item.name+",value:"+item.value); 
}); 
});

ここで特別な注意が必要なのは、メソッド 1 の eval() メソッドが文字列 (おそらく js スクリプト) を動的に実行するため、システムのセキュリティ上の問題が簡単に発生する可能性があることです。したがって、eval() を回避するサードパーティのクライアント スクリプト ライブラリを使用できます。たとえば、JavaScript の JSON は 3K 未満のスクリプト ライブラリを提供します。

2 番目の解析方法は、Function オブジェクトを使用することです。その典型的な用途は、JQUERY

の AJAX メソッドでの成功などの返されたデータの解析です。

var json='{"name":"CJ","age":18}';
data =(new Function("","return "+json))();

このときのデータは解析対象のjsonオブジェクトです。

この記事が JavaScript プログラミングのすべての人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。