jquery eval_jqueryでJSONを解析する際の注意点の紹介

WBOY
リリース: 2016-05-16 17:24:30
オリジナル
815 人が閲覧しました

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

1。1 つは eval() 関数を使用する方法です。

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

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

jquery を使用して JSON データを解析し、jquery 非同期リクエスト、jquery リクエストの送信オブジェクトとして使用します返される結果は json オブジェクトです。ここで考慮されるのは、JSONObject などのプラグインによってカプセル化された JSON オブジェクトの場合、サーバーによって返される文字列であるため、ここでは説明しません。
最初に JSON 文字列セットが示されています。文字列セットは次のとおりです。

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

コードをコピーします。 > コードは次のとおりです:
var data="
{
root:
[
{name:'1',value :'0'}、
{名前:'6101'、値:'北京'}、
{名前:'6102'、値:'天津'}、
{名前:'6103'、 value:'上海' },
{name:'6104',value:'重慶市'},
{name:'6105',value:'渭南市'},
{name:' 6106',value: '延安市'},
{name:'6107',value:'漢中市'},
{name:'6108',value:'楡林市'},
{名前:'6109 ',値:'安康市'},
{名前:'6110',値:'商洛市'}
]
}";

ここでは jquery 非同期で取得したデータ型 (json オブジェクトと文字列) に基づいて、2 つの方法で取得された結果の処理方法をそれぞれ紹介します。

1. サーバーから返される JSON 文字列の場合、jquery 非同期リクエストがタイプを指定しない場合、または文字列の形式で受け入れる場合は、メソッドをオブジェクト化する必要はありません。面倒、つまり文字列を変換して eval() に入れて一度実行します。このメソッドは、通常の javascipt メソッドで json オブジェクトを取得するのにも適しています。次の例で説明します。

var dataObj=eval("(" data ")");//json オブジェクトに変換
理由ここに eval する必要がありますか? "("(" data ")");//" を追加するのはどうですか?

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

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

コードをコピー コードは次のとおりです。
alert( eval("{}"); // return unknown
alert(eval("({})");// return object[Object]

この書き込みメソッドでは、 JS では、次のように

のどこでも見ることができます: (function()) {}(); クロージャ操作を行うときなど。 ---------------------------------- ---------------


コードをコピーします コードは次のとおりです:
alert(dataObj.root.length);/ /ルートの子オブジェクトの数を出力
$.each(dataObj.root,fucntion(idx,item){
if(idx==0){
return true;
}
//各ルート サブオブジェクトの名前と値を出力します
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){ //ここで返されるデータはすでに json オブジェクトです//以下の他の操作は最初のケースと同じです$.each(data.root,function(idx) ,item){ if(idx ==0){ return true;//countinue と同じ、break と同じ false を返す
}
alert("name:" item.name " ,value:" item.value);
} );
});


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

2 番目の解析方法は、Function オブジェクトを使用することです。その典型的な用途は、JQUERY
コードをコピー コードは次のとおりです:
var json='{"name":"CJ","age":18}'; 🎜 >data =(new Function("","re​​turn " json))();


このときのデータは解析対象の json オブジェクトです。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート